使用AsyncTask时出现问题

时间:2011-03-13 15:36:00

标签: android android-asynctask

我正在学习AsyncTask,我试着在doInBackground方法中打印Toast消息,是否可以在其中使用Toast消息?代码运行正常是Toast消息被删除.. 获取错误,因为无法在未调用Looper.prepare()

的线程内创建处理程序

2 个答案:

答案 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.....
    }
});