2016-11-29 9 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(); 
} 

Update 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

Я думаю, что вы вызываете ход процесса обновления только один раз, как вы слушаешь прогрессировать изменение состояния слушателя ?, если вы хотите использовать, что вы должны постоянно называть updateUploadingDialog, который не является хорошей процедурой

Вы должны написать процедуру загрузки в AsyncTask и обновлять прогресс в onProgressUpdate метод()

Here и here являются примером для справки

на preExecute инициализации индикатора, в doinbackground загрузить файл, в onProgressUpdate обновления ба прогресса г и на postexecute делать все, что вы хотите сделать после загрузки

Надеется, что это помогает

0

В соответствии вы не используете AsyncTask, вы не можете получить возможность 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); 
    } 
}; 

 Смежные вопросы

  • Нет связанных вопросов^_^