2013-05-06 31 views
0

当我尝试从线程访问进度条时,进度条不会显示,也不会更新进度。我希望在网络活动完成之前显示进度微调,并且此网络活动只是将一些文本数据发布到服务器。这是迄今为止的代码,任何帮助表示感谢,从线程启用和更新进度条

Thread th = new Thread(){ 
     public void run() { 

        try { 
         sleep(5000); 

         while(cnt < 5000){ 
          activty.this.runOnUiThread(new Runnable(){ 
           public void run() 
           { 
            ProgressBar pd = (ProgressBar)findViewById(R.id.progressBar1); 
            pd.setVisibility(0); 
            pd.setMax(100); 

            pd.setProgress(cnt); 
            cnt += 100; 
           } 
          }); 
         } 
        } catch (InterruptedException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
     } 

     int cnt = 100; 
    }; 
    th.start(); 
    ` 
+0

您是否检查过xml ?,也许其他视图没有留下足够的空间用于进度栏。 – Daniel 2013-05-06 03:44:14

+0

那里也有好眼睛,我可能忽略了这一点。 – kabuto178 2013-05-06 03:46:14

回答

2

这正是你想使用AsyncTask,这在一个单独的线程处理数据和包含的方法publishProgressonProgressUpdate更新你的UI线程UI的情况。

Processes and Threads Guide也有一个如何实现AsyncTask的例子。

+0

有没有办法制作一个通用的asynctask课程,或者我必须为每个网络活动制作一个我必须在我的活动中执行的课程。 – kabuto178 2013-05-06 03:47:15

+1

@ kabuto178试试这个http://stackoverflow.com/questions/14253421/how-one-interface-can-be-used-for-different-background-android-tasks/14376233#14376233,你可以改变doInBackground中的代码根据你的请求,即获得或发布 – Pragnani 2013-05-06 03:48:50

+0

@ kabuto178 - 'AsyncTask的doInBackground可以接受参数,例如如果唯一的区别是你需要下载的文件,你可以将它传递给你的AsyncTask并重用它:'新的NetworkAsyncTask()。execute(urlToDownload)'例如 – ianhanniballake 2013-05-06 03:49:25