2 o casper ne O_Casper_ne 于 2013.05.20 13:24 提问

如何正确实现一个progressBar?

我正在创建一个Android程序。在程序中我从json页面中获取数据。这个操作时间延迟。
所以我必须显示一个progressbar,直到获取过程完成。我使用的下面代码:

public void onCreate(Bundle savedInstanceState) {
//somecode
ProgressDialog progressBar = new ProgressDialog(this);
     progressBar.setCancelable(true);
      progressBar.setMessage("Loading");
      progressBar.show();
      Thread thread = new Thread(this);
      thread.start();
}
 public void run() {
    flag=GetFixtureDetailsJsonFunction();
    handler.sendEmptyMessage(0);
}
protected boolean GetFixtureDetailsJsonFunction() {
//json parsing code
return true
}
private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        if (flag==true) {
            progressBar.dismiss();
        }
    }
};

使用这段代码获得异常

exception.android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

如何正确实现一个progressBar?

2个回答

nana4ever
nana4ever   2013.05.20 16:42

AsyncTask 是从 xml 或者 database 中获取响应的最好的方法:

private class DownloadQuestion extends AsyncTask<String, Void, String> 
    {           
        @Override
        protected void onPreExecute() 
        {
             pd = ProgressDialog.show(Activity_SplashScreen.this, "","Please wait...", true,false);                    
              super.onPreExecute();
        }
           @Override
        protected String doInBackground(String... urls) 
        {
            //Write background code here Code 
            return "";
        }
          @Override
        protected void onPostExecute(String response1) 
        {
            //Some Code.....
                if (pd != null && pd.isShowing())
                pd.dismiss();
          }
    }
wurenbi45
wurenbi45   2013.05.21 15:58

ProgressDialog progressBar定义成静态变量试试.

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!