簡體   English   中英

ProgressDialog與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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM