2016-11-29 166 views
0

一天的美好時光。
我想讓應用程序上傳文件到服務器,並顯示在ProgressDialog上傳的進度。更新進度對話框

這是我的代碼至今:
的上傳過程創建ProgressDialog

private void createUploadingDialog(int filesCount) { 
    uploadingDialog = new ProgressDialog(getActivity()); 
    uploadingDialog.setIndeterminate(true); 
    loadingDialog.setMessage(getString(R.string.upload_progress, 0, filesCount)); 
    loadingDialog.show(); 
} 

辭退ProgressDialog對上傳程序

private void dismissUploadingDialog() { 
    if (uploadingDialog.isShowing()) 
     uploadingDialog.dismiss(); 
} 

更新ProgressDialog對上傳程序

private void updateUploadingDialog(final String dialogMessage) { 
    class UpdateDialog implements Runnable { 
     private String messageString; 
     private UpdateDialog(String ms) { messageString = ms; } 
     public void run() { 
      uploadingDialog.setMessage(messageString); 
     } 
    } 
    getActivity().runOnUiThread(new UpdateDialog(dialogMessage)); 
} 

呼叫建立對話

createUploadingDialog(imagesPathsArray.size()); 

呼叫駁回對話框

dismissUploadingDialog(); 

呼叫更新對話框的onSuccess

updateUploadingDialog(getString(R.string.upload_progress, i, imagesPathsArray.size())); 

呼叫更新對話框onFailure處

updateUploadingDialog(getString(R.string.retrying_request)); 

顯示在對話框中的片段。要將圖像發送到服務器,我使用了Retrofit2。

當我做對話框初始設置,消息得到正確設置(顯示總文件和當前一個),但是,更新調用時消息不更新。出於某種原因,沒有錯誤拋出,如果我加入Log.d,它甚至表明該方法被調用。

謝謝你的幫助!

+0

您應該閱讀此。這將幫助您。 http://stackoverflow.com/questions/3028306/download-a-file-with-android-and-showing-the-progress-in-a-progressdialog?rq=1 –

回答

0

我想你在呼喚更新進度只有一次,你怎麼listning進步狀態改變監聽器?如果你想使用,你必須不斷地打電話updateUploadingDialog這是不是一個很好的程序

你必須寫上載過程中的AsyncTask和onProgressUpdate更新進度()方法

Herehere是例如用於對preExecute參考

初始化進度條,在doinbackground上傳文件時,在onProgressUpdate更新進度BA r和對postexecute你想上傳後做

希望這按不使用的AsyncTask幫助

0

什麼都,你不能得到onProgressUpdate功能的機會。所以,你必須手動更新你的進度條狀態,就像使用自己的線程一樣,你已經做到了。但是,我使用下面的源代碼解決了我的問題,您可以檢查它:

private void createThread(){ 
    Runnable runable = new updateProgressStatus(); 
    progressUpdateThread = new Thread(runnable); 
    progressUpdateThread.start(); 
} 

public class updateProgressStatus implements Runnable { 
    public void run() { 
     while(Thread.currentThread()==progressUpdateThread)    
      try { 
       Thread.sleep(1000);  
       progressHandler.sendMessage(YOUR MESSAGE); 
      } catch (InterruptedException e) { 
       // Interrupt problem 
       Thread.currentThread().interrupt(); 
      } catch (Exception e) { 
     e.printStackTrace(); 
     } 
    } 
} 

private Handler progressHandler = new Handler(){ 
    @Override 
    public void handleMessage(Message message) { 
     // Now, update your progress bar status 
     progress.setProgress(message.what); 
    } 
};