android - 在 android 中的 onPostExecute() 中 toast

标签 android android-asynctask

我正在尝试在异步的 OnPostExecture 中发布 toast 。

这是我所做的,但它没有记录,也没有 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();
    }
}

我还尝试了以下方法:

声明上下文:

 private Context mContext;

//调用异步

new sendDetails(mContext).execute();

//异步代码:

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();
    }
}

两者均无效。如何从 Async toast ......有人可以帮我解决这个问题吗?

更新:

根据 JDJ、matiash 和 RajaReddy PolamReddy 更改

删除完成();在 onPreExecute 中。 并在 OnPostExecute 中添加以下内容:

 Toast.makeText(MainActivity.this, "Email Succesfully Sent...", Toast.LENGTH_SHORT).show();
 finish();

谢谢!

最佳答案

您不必在 onPostExecute() 中调用 runOnUiThread() ...此时它已经在 UI 线程上。

所以你的 onPostExecute() 应该看起来像这样:

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

并且通过在后台线程启动之前在 onPreExecute() 中执行 finish() Activity ,在后台线程完成并调用 onPostExecute() 之后,mContext在您传递给 Toast 构造函数的 onPostExecute() 中,它甚至可能不再有效。

关于android - 在 android 中的 onPostExecute() 中 toast ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24566376/

相关文章:

android - 如何在 Android 应用程序中保存/存储对象的多维列表?

javascript - 如何在选择器级别和 react native 值中存储js对象?

android - OrientationChange 处理 Activity、Fragment、AsyncTask 和 DialogFragments?

android - AsyncTask 执行()或 executeOnExecutor()?

android - 在 AsyncTask 完成时完成调用 Activity

Android ProgressDialog 不与 AsyncTask 一起工作

android - 添加进度对话框 asynctask Android 登录

android - 使用表格行动态填充表格布局

java - 添加Parse SDK后出现错误:Execution failed for task ':app:dexDebug' .

android - 按钮上的背景和文本