![](/img/trans.png)
[英]ProgressDialog won't show, even in onPreExecute of AsyncTask
[英]ProgressDialog vs. AsyncTask - won't show
我知道這個問題已經被問過多次了,但是我有一個看似干凈的代碼,它根本行不通,沒有任何異常或異常。
我有一個簡單的一鍵式Activity( MainActivity
)。 其中的按鈕調用AsyncTask
以便在后台發送電子郵件。 我試圖做一些我認為很普遍的事情:任務開始時顯示一個ProgressDialog
,任務結束時將其關閉。 為此,我將上述代碼放入AsyncTask.onPreExecute()
和AsyncTask.onPostExecute()
。 我以為問題出在提供給對話框構造函數的Context
,但是我為AsyncTask
創建了一個簡單的構造函數,並將應用程序上下文傳遞給該構造函數。 我添加了一個簡單的Toast
進行調試,但是它都沒有顯示。
這是按鈕onClick
方法的代碼:
public void onClick(View v) {
new Sender(this).execute("args");
}
這是任務的代碼:
private class Sender extends AsyncTask<String, Void, Void> {
private ProgressDialog progDialog;
private Context context;
public Sender(Context context) {
this.context = context;
}
@SuppressWarnings("unused")
protected void onPreExecute(Void... params) {
Toast.makeText(this.context, "Sending...", Toast.LENGTH_SHORT).show();
progDialog = ProgressDialog.show(this.context, "Sending", "Picture is being sent...", true);
}
protected Void doInBackground(String... mailSubj) {
// some code that works
return null;
}
@SuppressWarnings("unused")
protected void onPostExecute(Void... v) {
progDialog.dismiss();
Toast.makeText(MainActivity.this, "Mail sent", Toast.LENGTH_SHORT).show();
}
}
我哪里做錯了?
您的進度對話框未顯示,因為您沒有覆蓋onPreExecute()
。 添加@Override
注解您onPreExecute()
看看會發生什么。 onPreExecute
接受任何參數。
我發現了這個錯誤,解決方案很簡單:向onPreExecute()
和onPostExecute()
添加參數的Void
列表會導致Java無法覆蓋AsyncTask
的方法。 前者不需要參數,而后者則需要單個Result(在這種情況下為Void
)參數。 這個問題可以解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.