如何在AsyncTask中举杯祝酒,提示使用Looper

我有任务由AsyncTask在后台完成。 在某些时候,我需要发出一个Toast来完成某些事情。

我尝试过,我失败了,因为Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

我怎样才能做到这一点?

Solutions Collecting From Web of "如何在AsyncTask中举杯祝酒,提示使用Looper"

onPostExecute – 在UI线程或publishProgress() ; 在你的dobackbackground和

 protected void onProgressUpdate(Integer... progress) { } 

http://developer.android.com/reference/android/os/AsyncTask.html

你也可以使用runOnUiThread方法来从后台线程操纵你的UI。

你可以在doInBackground里面吐司

将此代码添加到Toast出现的位置

 runOnUiThread(new Runnable() { public void run() { Toast.makeText(<your class name>.this, "Cool Ha?", Toast.LENGTH_SHORT).show(); } }); 

如果你想使用Toast你应该使用这个方法:onProgressUpdate()

 protected Integer doInBackground(Void...Params) { int check_point = 1; publishProgress(check_point); return check_point; } protected void onProgressUpdate(Integer integers) { if(integers == 1) { Toast.makeText(classname.this, "Text", 0).show(); } 

如果你想从后台线程显示吐司,你将不得不从doInBackground调用runOnUiThread。 我不相信有另一种方式。

编辑:我拿回来。 我认为你可以实现在UI线程上运行的onProgressUpdate来显示Toast并从doInBackground调用publishProgress。

如果要在doInBackground中显示Toast,可以在AsyncTask的OnPostExecute方法中使用它。

 protected void onPostExecute(String file_url) { Toast.makeText(getApplicationContext(),"Your Message", Toast.LENGTH_LONG).show(); pDialog.dismiss();//dismiss the progress dialouge }