[英]Toast in onPostExecute() in android
我試圖在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();
}
}
我也嘗試過以下方法:
聲明上下文:
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敬酒..有人可以幫我解決這個問題嗎?
更新:
根據JDJ,matiash和RajaReddy PolamReddy改變
remove Finish(); 在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();
}
並finish()
的后台線程開始之前,荷蘭國際集團在onPreExecute()的活動,后台線程完成和onPostExecute()被調用后, mContext
()您傳遞到吐司構造函數onPostExecute甚至可能不有效了。
這是沒有必要調用runOnUiThread()
從onPostExecute()
該方法已在UI線程上運行。
這個:
@Override
protected void onPreExecute()
{
super.onPreExecute();
finish();
}
看起來很奇怪 你在啟動任務之前完成了活動,這是正確的嗎?
您正在onPreExecute()
中finishing
活動,因此該當前的上下文正在關閉,因此toast將無效,請先刪除該cde。
AsyncTask將像這樣工作
執行異步任務時,任務流如下:
所以從onPreExcute()中刪除finish並在onPostExcute()中使用它,如果你想要的話,還有一件事不需要在postExecute()方法中的Ui線程上運行。
無需在后執行中編寫runOnUiThread
方法。
嘗試這個
protected class sendDetails extends AsyncTask<Context, Integer, Boolean>
{
@Override
protected Boolean doInBackground(Context... params)
{
try
{
Thread.sleep(1000);
sendEmail();
}
catch (InterruptedException e)
{
}
return true;
}
@Override
protected void onPostExecute(Boolean result)
{
Toast.makeText(mContext, "Email Succesfully Sent...", Toast.LENGTH_SHORT).show();
}
@Override
protected void onPreExecute()
{
super.onPreExecute();
finish();
}
}
我是這樣做的:
在擴展Async的類中,我創建了一個構造函數並將調用活動的上下文傳遞給它。 我在后台執行一些任務並將結果作為字符串返回。 返回的字符串表示任務是否成功執行。 我在onPostExecute()中創建了toast,它工作正常。 這是相同的代碼:
public class TaskInBackground extends AsyncTask<Map<Integer,Object>, Void, String> {
Context context;
public TaskInBackground(Context context)
{
this.context=context;
}
/**
* task to be executed in the background
*/
@Override
@SuppressWarnings("unchecked")
protected String doInBackground(Map<Integer, Object>... params) {
Map<Integer, Object> taskRequested=params[0];
switch(taskRequested)
case(1):
return("Success");
case(2):
return("Success");
default:
return "Invalid";
}
}
/**
* post execution of background task, what needs to be done
*/
protected void onPostExecute(String result)
{
Toast.makeText(context, result, Toast.LENGTH_SHORT).show();
}
}
試試這段代碼
public static void pushList(Activity context){
static Context = mConext;
protected void onPostExecute(String result) {
Toast toast=Toast.makeText(mConext,"Succefully Updated Profile",Toast.LENGTH_LONG);
toast.show();
}
}
這段代碼非常適合我並顯示toast msg。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.