在Android中的onPostExecute()中吐司

The*_*Man 2 android android-asynctask

我试图在Async中的OnPostExecture中发布一个Toast.

这是我所做的,但它没有记录,也没有烘烤.

protected class sendDetails extends AsyncTask<Context, Integer, Boolean>
{

    @Override
    protected Boolean doInBackground(Context... params) 
    {
        try 
        {
            Thread.sleep(1000);
        }
        catch (InterruptedException e) 
        {
        }

        sendEmail();
        return true;
    }

    @Override
    protected void onPostExecute(Boolean result) 
    {
        runOnUiThread(new Runnable() 
        {
            public void run() 
            {
                Toast.makeText(mContext, "Email Succesfully Sent...", Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    protected void onPreExecute() 
    {
        super.onPreExecute();
        finish();
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过以下方法:

声明上下文:

 private Context mContext;
Run Code Online (Sandbox Code Playgroud)

//调用异步

new sendDetails(mContext).execute();
Run Code Online (Sandbox Code Playgroud)

//异步代码:

protected class sendDetails extends AsyncTask<Context, Integer, Boolean>
{

    public sendDetails(final Context context) 
    {
        mContext = context;
    }

    @Override
    protected Boolean doInBackground(Context... params) 
    {
        try 
        {
            Thread.sleep(1000);
        }
        catch (InterruptedException e) 
        {
        }

        sendEmail();
        return true;
    }

    @Override
    protected void onPostExecute(Boolean result) 
    {
        runOnUiThread(new Runnable() 
        {
            public void run() 
            {
                Toast.makeText(mContext, "Email Succesfully Sent...", Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    protected void onPreExecute() 
    {
        super.onPreExecute();
        finish();
    }
}
Run Code Online (Sandbox Code Playgroud)

两者都没用.如何从Async敬酒..有人可以帮我解决这个问题吗?

更新:

根据JDJ,matiash和RajaReddy PolamReddy改变

remove Finish(); 在onPreExecute中.并在OnPostExecute中添加以下内容:

 Toast.makeText(MainActivity.this, "Email Succesfully Sent...", Toast.LENGTH_SHORT).show();
 finish();
Run Code Online (Sandbox Code Playgroud)

谢谢!

JDJ*_*JDJ 5

你不必调用runOnUiThread()onPostExecute()......它已经在该点的UI线程上.

所以你的onPostExecute()应该是这样的:

@Override
protected void onPostExecute(Boolean result) 
{
    Toast.makeText(mContext, 
                   "Email Succesfully Sent...", 
                   Toast.LENGTH_SHORT).show();
}
Run Code Online (Sandbox Code Playgroud)

通过finish()在后台线程启动之前在onPreExecute()中执行活动,在后台线程完成并调用mContextonPostExecute()之后,您传入Toast构造函数的inPostExecute()可能甚至不再有效.