我正在尝试在异步的 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/