2017-05-30 66 views
0

我想設置ProgressDialog以向用戶顯示InputStream字節的進度。我能夠通過這種方式之下,在Android工作室的控制檯上顯示此:如何爲inputStream設置ProgressBar?

Log.d(TAG, "Progress, transferred " + Integer.toString(100 * bytesTransferred/osSize) + "%"); 

但是,我不知道如何將bytesTransferred/osSize正確連接到一個ProgressDialog,我可以使用線程時間進度條將花費多長時間來填充進度與下面的代碼:

update = new ProgressDialog(this); 
    update.setTitle("Transferring update"); 
    update.setMessage("Please wait updating..."); 
    update.setCanceledOnTouchOutside(false); 
    update.setProgress(0); 

    final int totalProgressTime = 100; 
    final Thread t = new Thread() { 
     @Override 
     public void run() { 
      int jumpTime = 0; 
      while(jumpTime < totalProgressTime) { 
       try { 
        sleep(1800); 
        jumpTime += 1; 
        update.setProgress(jumpTime); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }; 
    t.start(); 

    update.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    update.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.dismiss(); 
     } 
    }); 
    update.show(); 
} 

但會更好展現給用戶的實際字節傳輸。這下面是我必須與:

final int osSize; 
    final InputStream inputStream; 

    osSize = inputStream(); 

    public void onProgress(int bytesTransferred) { 
    Log.d(TAG, "Progress, transferred " + Integer.toString(100 * bytesTransferred/osSize) + "%"); 

    } 

任何幫助,將不勝感激,在此先感謝。

+0

https://stackoverflow.com/questions/8379398/java-progressmonitorinputstream-using-existing-jprogressbar – hunter

+0

我希望找到一個簡單的方法來實現這一點,而不必以複雜的方式編寫不同的類,但感謝鏈接。我想知道是否可能只是添加到已經在logcat中顯示正在傳輸的字節的進程對話框中的onProgress。如果你明白我想說的話,我只需要知道如何將它們連接在一起。 – Jonas

回答

0

擴展這樣的:

@Override 
    public void run() { 
     int jumpTime = 0; 
     while(jumpTime < totalProgressTime) { 
      try { 
       sleep(1800); 
       jumpTime += 1; 
       update.setProgress(jumpTime); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

有了這個:

@Override 
    public void run() { 
     int jumpTime = 0; 
     while(jumpTime < totalProgressTime) { 
      try { 
       sleep(1800); 
       jumpTime += 1; 
       final int fJumpTime = jumpTime; 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
        update.setProgress(fJumpTime); 
       }); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
+0

謝謝,但是我得到'變量'JumpTime'從內部類訪問,需要聲明爲最終'。然後我設置爲final,然後'jumpTime + = 1'然後抱怨你不能給最終變量'JumpTime'賦值。對此有何想法? – Jonas

+0

是的。對不起,我第一次沒有看到,請查看我的編輯:)。 –