【问题标题】:Enabling and update progressbar from a thread从线程启用和更新进度条
【发布时间】:2013-04-29 18:56:53
【问题描述】:

当我尝试从线程访问进度条或更新进度时,进度条不会显示。我宁愿只显示一个进度微调器,直到网络活动完成,这个网络活动只是将一些文本数据发布到服务器。这是我到目前为止的代码,感谢任何帮助,

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

【问题讨论】:

  • 你检查了xml吗?可能是其他视图没有为进度条留出足够的空间。
  • 这也不错,我可能忽略了这一点。

标签: android


【解决方案1】:

这正是您想要使用 AsyncTask 的情况,它在单独的线程中处理数据并包含方法 publishProgressonProgressUpdate 以在 UI 线程上更新您的 UI。

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

【讨论】:

  • 有没有办法制作一个通用的 asynctask 类,或者我必须为我必须在我的活动中执行的每个网络活动制作一个。
  • @kabuto178 试试这个stackoverflow.com/questions/14253421/…,您可以根据您的要求更改doInBackground中的代码,即获取或发布
  • @kabuto178 - AsyncTask 的 doInBackground 可以接受参数,例如,如果唯一的区别是您需要下载的文件,您可以将其传递到您的 AsyncTask 并重用它:new NetworkAsyncTask().execute(urlToDownload)例如
  • 在我的情况下,一个任务需要返回位图,另一个需要 JSONObject
  • @kabuto178 - 那么听起来两个 AsyncTask 似乎更合适。
猜你喜欢
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多