Android中具有一些后台逻辑的进度对话框给出了Handler Error?

时间:2011-11-19 08:24:03

标签: android handler progressdialog

有人对Andorid与Thread的ProgressDialog有任何想法吗?我成功地能够显示对话框并将其解除,但是我有一些很长的逻辑要做,然后才会关闭对话框,直到该对话框显示加载消息。我把我的逻辑代码放在线程的Run方法中,而条件是,直到我没有得到特定的结果,它才会运行代码。但不知何故,它给Handler和Looper.prepare()错误。我试图找到这个,并了解我必须使用Handler类的功能。

2 个答案:

答案 0 :(得分:1)

ProgressDialog属于用户界面。在开始线程之前,不要在线程和节目中忽略它;

像这样。

 Thread th=new Thread(this);
 ProgressDialog pd=new ProgressDialog(this);
 pd.setMessage("Loading...");
 pd.show();
 th.start();

现在让处理程序类解散它

void run(){
 ///do your work;
 handler.sendEmptyMessage(0); 
 }
 private Handler  handler=new Handler(){
   //override onhandle message method and dismiss dialog in it

  }

答案 1 :(得分:0)

同样,你可以实现AsyncTask概念,这在Android中非常适合实现线程任务,通过实现这个任务,系统本身可以处理线程任务,如start,run,stop ...... 。等等。这就是为什么它被称为Painless Threading

如果您已经通过AsyncTask链接,那么我确信您已经注意到了AsyncTask的这4种方法。

对于您的问题,您可以按如下方式实现AsyncTask:

  1. onPreExecute() - 显示进度对话框
  2. doInBackground() - 实现所有长时间运行的任务
  3. onPostExecute() - 通过调用dialog.dismiss();
  4. 关闭进度对话框

    我相信你现在明白了。

    一切顺利。

    更新

    你只需要在onPreExecute()方法中编写Dialog.Show()方法,在onPostExecute()方法中编写dialog.dismiss()。是的,我已经告诉了1000次,你不能直接在doInBackground()方法中写Toast,因为Android不允许在主线程上骑,如果你仍想执行它,那么在内部写入相同的Toast消息runOnUiThead方法(此方法应位于doInBackground()。