如何在doInBackground中的AsyncTask中显示toast

时间:2012-12-09 18:29:34

标签: android android-asynctask

在我的一项活动中,我正在使用AsyncTask。在doInBackground()我正在调用各种方法。在其中一个方法中我得到一个异常,所以在catch块中我想在Toast中显示错误。 我知道我可以使用Log,但我仍然喜欢Toast。 那么,如何在doInBackground()中使用Toast in AsyncTask?

9 个答案:

答案 0 :(得分:17)

从doInBackground返回

protected String doInBackground(String... params){
    //some code
    try{
       //some code
     }catch(Exception e){
        return "Exception Caught";
     }
     return someValidResult;
}

protected void onPostExecute(String result){
    if(result.equalsIgnoreCase("Exception Caught")){
       //Display Toast
    }else{
       // // whatever you wana do with valid result
    }
}

答案 1 :(得分:11)

你可以在runOnUIThread()中包裹Toast,但这不是最佳解决方案 发生错误时应在catch块中设置布尔标志,然后在onProgressUpdate()onPostExecute()或任何其他具有UI访问权限的方法中显示适当的Toast,只要标志为{{1} }。

答案 2 :(得分:6)

将以下代码写在必须以doInBackground()方法

显示吐司的地方
runOnUiThread(new Runnable() {

public void run() {

  Toast.makeText(getApplicationContext(), "Example for Toast", Toast.LENGTH_SHORT).show();

   }
});
  • 顺便说一句:如果您使用的是Fragments,则需要通过您的活动致电runOnUiThread(...)

getActivity().runOnUiThread(...)

答案 3 :(得分:3)

您可以在方法中显示它,该方法可以访问UI线程,如onPreExecute()onProgressUpdate()onPostExecute()

答案 4 :(得分:3)

创建一个处理程序对象并使用它执行所有Toast消息。

@Override
protected Void doInBackground(Void... params) {

    Handler handler=new handler();
    handler=  new Handler(context.getMainLooper());
    handler.post( new Runnable(){
        public void run(){
            Toast.makeText(context, "Created a server socket",Toast.LENGTH_LONG).show(); 
        }
    });
  }

答案 5 :(得分:1)

runOnUiThread(new Runnable() {

public void run() {

  Toast.makeText(getApplicationContext(), "Example for Toast", Toast.LENGTH_SHORT).show();

   }
}); 

非常适合在doInBackground()方法中显示吐司

答案 6 :(得分:0)

activity.runOnUiThread(new Runnable() {
 public void run() 
 {
    Toast.makeText(activity, "Toast teaxt", Toast.LENGTH_SHORT).show();
 }
});

答案 7 :(得分:0)

试试这段代码

void showError(final String err) {
    runOnUiThread(new Runnable() {
        public void run() {
            Toast.makeText(downloadprogress.this, err + "error in download", Toast.LENGTH_LONG)
                    .show();
        }
    });
  }

答案 8 :(得分:0)

如果您必须声明与Thread相关的任何内容,那么它必须在runOnUiThread()方法之外,然后仅将其执行,

    @Override
    protected String doInBackground(String... strings) {
        for(int i=0; i<10; i++) {

            runOnUiThread(new Runnable() {
                public void run() {
                    Toast.makeText(getApplicationContext(), "Example for Toast "+i, Toast.LENGTH_SHORT).show();
                }
            });

            try {
                Thread.sleep(10);
            } catch (Exception e) {}
        }

        return "";
    }