2016-11-29 5 views
0

Gute Zeit.
Ich versuche, Anwendung, die Dateien auf den Server hochladen soll und den Fortschritt des Uploads in ProgressDialog anzuzeigen.Aktualisierung Fortschrittsdialog

Dies ist der Code, den ich bisher habe:
ProgressDialog erstellen für das Hochladen Verfahren

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

ProgressDialog für das Hochladen Verfahren Entlassen

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

aktualisieren ProgressDialog für das Hochladen Verfahren

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)); 
} 

Anruf Dialog Dialog

dismissUploadingDialog(); 

Anruf

createUploadingDialog(imagesPathsArray.size()); 

Anruf erstellen entlassen Dialog onSuccess zu aktualisieren

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

Anrufdialog onFailure

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

Der Dialog in Fragmente aktualisieren angezeigt wird. Um Bilder an den Server zu senden, verwende ich Retrofit2.

Wenn ich die Ersteinrichtung des Dialogs mache, wird die Nachricht richtig gesetzt (zeigt die gesamten Dateien und die aktuelle an), die Nachricht wird jedoch nicht aktualisiert, wenn der Update-Aufruf erfolgt. Aus irgendeinem Grund wird kein Fehler ausgelöst und wenn ich Log.d hinzufüge, zeigt es sogar, dass die Methode aufgerufen wurde.

Vielen Dank für jede Hilfe!

+0

sollten Sie dies lesen. Dies wird Ihnen helfen. http://stackoverflow.com/questions/3028306/download-a-file-with-android-and-showing-the-progress-in-a-progressdialog?rq=1 –

Antwort

0

Ich glaube, Sie Update Fortschritt nur einmal aufrufen, wie werden listning Sie Zustandsänderung Zuhörer zum Fortschritt ?, wenn Sie verwenden möchten, dass Sie kontinuierlich updateUploadingDialog müssen aufrufen, die kein gutes Verfahren ist

Sie müssen Ladeverfahren in AsyncTask schreiben und aktualisieren Fortschritt in onProgressUpdate() Methode

Herehere und sind beispielsweise für die Referenz

auf PreExecute den Fortschrittsbalken initialisieren, in doinbackground die Datei laden, in onProgressUpdate die Fortschritte ba aktualisieren r und auf PostExecute tun, was immer Sie nach dem Hochladen

Hoffnung machen wollen diese

0

hilft Wie pro Sie sind nicht AsyncTask verwenden, können Sie nicht die Gelegenheit, von onProgressUpdate Feature bekommen. Sie müssen also den Fortschrittsbalkenstatus manuell aktualisieren, indem Sie einen eigenen Thread verwenden, und das haben Sie bereits getan.Aber, löste ich mein Problem mit der Verwendung von unten Quellcode, können Sie es überprüfen:

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); 
    } 
}; 
Verwandte Themen