これを行ういくつかの方法があります。3つすべてが機能するはずですが、自分でテストしたことはありません。
方法1
コンテキストを取り込んで保存するAsyncTaskのコンストラクターを作成し、実行時に使用できるようにします。
AsyncTaskコード
public class DataProcessor extends AsyncTask<Void, Void, Void>{
private Context mContext;
public DataProcessor(Context context){
this.mContext = context;
}
@Override
protected Void doInBackground(Void... params) {
DataBaseHelper helper = OpenHelperManager.getHelper(mContext, DatabaseHelper.class)
// Your code here
}
}
実装コード(アクティビティ用)
new DataProcessor(this).execute();
方法2
execute
メソッドを呼び出すときに、コンテキストを引数として渡します
AsyncTaskコード
public class DataProcessor extends AsyncTask<Context, Void, Void>{
@Override
protected Void doInBackground(Context... params) {
Context context = params[0];
DataBaseHelper helper = OpenHelperManager.getHelper(context, DatabaseHelper.class)
// Your code here
}
}
実装コード(アクティビティ用)
new DataProcessor().execute(this);
方法3
非同期タスクが直接アクセスできるコンテキストの静的インスタンスを用意します。これを行う方法はここにあります:Androidで「コンテキスト」を取得する静的な方法?
AsyncTaskコード
public class DataProcessor extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
DataBaseHelper helper = OpenHelperManager.getHelper(MyApplication.getAppContext(), DatabaseHelper.class)
// Your code here
}
}
実装コード(アクティビティ用)
new DataProcessor().execute(this);