2017-05-30 70 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

是的。对不起,我第一次没有看到,请查看我的编辑:)。 –