我正在学习AsyncTask,我试着在doInBackground方法中打印Toast消息,是否可以在其中使用Toast消息?代码运行正常是Toast消息被删除.. 获取错误,因为无法在未调用Looper.prepare()
的线程内创建处理程序答案 0 :(得分:0)
知道了:)
protected class Asyctast extends AsyncTask<String, Integer, Integer>
{
@Override
protected Integer doInBackground(String... params) {
// TODO Auto-generated method stub
Log.d("Asynctask", ""+params);
Looper.prepare();
ImageThumbnailsActivity m = new ImageThumbnailsActivity();
Toast.makeText(ImageThumbnailsActivity.this,""+params ,Toast.LENGTH_SHORT).show();
final Dialog dialog_options = new Dialog(ImageThumbnailsActivity.this);
dialog_options.setContentView(R.layout.option);
dialog_options.show();
Looper.loop();
return null;
}
}
答案 1 :(得分:0)
虽然你的回答足够了,但你可能有兴趣知道为什么你不能在AsyncTask的“doInBackground”中进行Toast的原因。 AsyncTask的目的是运行在后台完成的事情。在您的情况下,您编写的所有代码不需要放在后台线程中。异步任务用于下载/保持永久运行的循环等等。如果您真的想要使用AsyncTask并将内容注入前台UI线程 - 例如Toast - 那么您必须获得对最顶层Context / Activity的引用,并调用:
myContext.runOnUiThread(new Runnable(){
@Override public void run{
Toast.....
}
});