バックグラウンドタスクが完了したときにToast
を実行して、完了したことをユーザーに知らせるだけです。
AsyncTaskの新しいクラスを作成しましたが、このクラス内でgetApplicationContext()
を使用できません。
タスクを実行するためにtask.execute(getTempFile(this), getApplicationContext());
を使用しています。 getTempFileはFileオブジェクトを返し、コンテキストをContextオブジェクトとして渡そうとしていました。
私のタスククラスには3つの変数AsyncTask<Object, Integer, Integer>
したがって、コンテキストは2番目のオブジェクトにあります。ただし、これによりアプリケーションがクラッシュします。
編集
public class LocationActivity extends Activity implements LocationListener {
protected void handleImage(Bitmap thumbnail){
PushDataToServer task = new PushDataToServer();
task.execute(getTempFile(this), getApplicationContext());
}
}
public class PushDataToServer extends AsyncTask<Object, Integer, Integer> {
Context context;
@Override
protected Integer doInBackground(Object... params) {
// TODO Auto-generated method stub
this.context = (Context) params[1];
File file = (File) params[0];
return null;
}
protected void onPostExecute(String result) {
Toast toast = Toast.makeText(this.context, "All done!", Toast.LENGTH_SHORT);
toast.show();
}
}
Context
オブジェクトをAsyncTask
のコンストラクターに渡します。
サンプルコード:
public class MyTask extends AsyncTask<?, ? ,?> {
private Context mContext;
public MyTask(Context context) {
mContext = context;
}
}
そして、AsyncTask
を構築するとき:
MyTask task = new MyTask(this);
task.execute(...);
これをメソッドパラメータとしてではなく、コンストラクタに渡します。そうすれば、ジェネリックパラメータに依存する必要はありません。
完全な例: 再利用可能なAsyncTask
コンテキストが2番目のオブジェクトにあると言いますが、2番目のオブジェクトは整数です。これはあなたの問題でしょうか?また、もう1つの提案は、AsyncTaskクラスをアクティビティのプライベート内部クラスとして配置することです。そうすれば、getApplicationContext()にアクセスできると確信しています。