1

この質問が何度も聞かれたことは知っていますが、明らかにクリーンなコードが機能しないだけで、例外などは何もありません。

簡単なワンボタン アクティビティ ( MainActivity) があります。その中のボタンはAsyncTask、バックグラウンドで電子メールを送信するために を呼び出します。私はそれがかなり一般的なことだと思うことをやろうとしました:ProgressDialogタスクの開始時に a を表示し、終了時にそれを閉じます。そのために、上記のコードをAsyncTask.onPreExecute()andに入れ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();
    }
}

どこで私は間違えましたか?

4

2 に答える 2

5

オーバーライドしないため、進行状況ダイアログは表示されませんonPreExecute()@Overrideに注釈を追加してonPreExecute()、何が起こるか見てみましょう。onPreExecute引数を取らない。

于 2013-01-17T23:59:52.400 に答える
0

私は間違いを見つけました。解決策は簡単です。Void引数のリストを に追加するonPreExecute()と、onPostExecute()Java は のメソッドをオーバーライドしませんAsyncTask。前者は引数を必要とせず、後者は単一の Result (この場合はVoid) 引数を必要とします。この質問は閉じることができます。

于 2013-01-18T00:07:14.650 に答える