我有 AsyncTask 在后台完成的任务。在某些时候,我需要发出一个 Toast 来表示某事已完成。
我试过了,但我失败了,因为
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
我怎样才能做到这一点?
我有 AsyncTask 在后台完成的任务。在某些时候,我需要发出一个 Toast 来表示某事已完成。
我试过了,但我失败了,因为
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
我怎样才能做到这一点?
onPostExecute - 在 UI 线程上执行或
publishProgress()
;在你的背景和
protected void onProgressUpdate(Integer... progress) {
}
http://developer.android.com/reference/android/os/AsyncTask.html
你可以在 doInBackground 里面 Toast
将此代码添加到您想要 Toast 出现的位置
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(<your class name>.this, "Cool Ha?", Toast.LENGTH_SHORT).show();
}
});
您还可以使用runOnUiThread方法从后台线程操作您的 UI。
如果你想使用 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();
}
如果要从后台线程显示 Toast,则必须从 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
}