我正在创建一个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?
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();
}
}
ProgressDialog progressBar定义成静态变量试试.