この質問が何度も聞かれたことは知っていますが、明らかにクリーンなコードが機能しないだけで、例外などは何もありません。
簡単なワンボタン アクティビティ ( 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();
}
}
どこで私は間違えましたか?