如何在Android中正确实现progressBar?
现在我正在做一个Android应用程序。在我的应用程序中,我必须从json页面获取数据。此操作需要时间延迟。因此,我必须显示progressbar,直到获取过程完成。我使用以下代码显示progressbar如何在Android中正确实现progressBar?,android,Android,现在我正在做一个Android应用程序。在我的应用程序中,我必须从json页面获取数据。此操作需要时间延迟。因此,我必须显示progressbar,直到获取过程完成。我使用以下代码显示progressbar public void onCreate(Bundle savedInstanceState) { //somecode ProgressDialog progressBar = new ProgressDialog(this); progressBar.setCancelabl
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$CalledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图。相反,我建议您实现,这在android中称为 使用这个异步任务,您不需要费心管理线程。而且很简单 供参考,请按以下步骤操作:
onPreExecute()
方法中显示进度栏doInBackground()方法中执行长时间运行的任务
onPostExecute()
方法中的ProgressBar。您还可以使用此方法显示各种操作这是实现此功能的一种有点奇怪的方式。我建议您使用AsyncTask,而不是修复该代码,AsyncTask正是为此目的而实现的。请参阅。您正试图从另一个不合格的线程访问UI视图。在本例中,这是您的处理程序 您应该使用AsyncTask并在其中执行progressDialog逻辑,而不是像这样尝试访问UI线程
- 开始在PreExecute上显示进度条
- doInBackground()作业,同时显示进度栏
- 在完成doInBackground()之后,最后在postExecute()上关闭progressBar
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();
}
}
私有类下载任务
{
@凌驾
受保护的void onPreExecute()
{
pd=ProgressDialog.show(活动_SplashScreen.this,“,”请稍候…”,true,false);
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(字符串…URL)
{
//在这里写背景代码
返回“”;
}
@凌驾
受保护的void onPostExecute(字符串响应1)
{
//一些代码。。。。。
if(pd!=null&&pd.isShowing())
pd.解散();
}
}
sarath,请使用处理程序查看此更新进度条。。