2017-05-30 1 views
0

Ich versuche ProgressDialog einzurichten, um dem Benutzer den Fortschritt eines InputStream von Bytes anzuzeigen. Ich bin in der Lage dies in der Konsole des Android Studios zeigt haft dies unter:Wie wird ProgressBar für inputStream eingerichtet?

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

Aber ich bin nicht sicher, wie die bytesTransferred/osSize richtig auf eine ProgressDialog zu befestigen, ich verwenden können, Thread zu Zeit, wie lange die Fortschrittsbalken nehmen die progressBar mit dem folgenden Code zu füllen:

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

Aber wäre viel besser für den Benutzer zu zeigen, die tatsächliche Übertragung des Bytes. Dies unten ist das, was ich muss arbeiten mit:

final int osSize; 
    final InputStream inputStream; 

    osSize = inputStream(); 

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

    } 

Jede Hilfe würde geschätzt, Dank im Voraus.

+0

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

+0

Ich hoffe auf Finden Sie einen einfachen Weg, um dies zu erreichen, ohne eine andere Klasse in einer komplexen Weise zu schreiben, aber danke für den Link. Ich frage mich, ob ich vielleicht gerade etwas zu dem onProgress hinzufügen kann, das bereits im Logcat die übertragenen Bytes anzeigt, einen ProgressDialog. Ich muss nur wissen, wie man es zusammenfügt, wenn Sie verstehen, was ich versuche zu sagen. – Jonas

Antwort

0

Extend dies:

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

mit diesem:

@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

Danke, aber ich bekomme 'Variable' JumpTime 'wird von mit inneren Klasse zugegriffen, muss endgültig erklärt werden'. Ich setze dann auf final und dann die 'jumpTime + = 1' und beklagere dann, dass du der finalen Variable 'JumpTime' keinen Wert zuweisen kannst. Irgendwelche Ideen dazu? – Jonas

+0

Wahr. Entschuldigung, ich habe das zum ersten Mal nicht gesehen, schaue auf meine Bearbeitung :). –

Verwandte Themen