こんなコードがあったとする
SampleActivity
Context context;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContantView(R.layout.sample);
context = getApplicationContext();
new AsyncTask().execute();
}
public void fileWrite(){
try{
openFileOutput("fileName",Context.MODE_APPEND);
}
}
AsyncTask
@Override
protected void onPostExecute(String s){
super.onPostExecute(s);
SampleActivity sampleA = new SampleActivity();
sampleA.fileWrite();
}
これだと
FileOutputStream android.content.Context.openFileOutput(java.lang.String, int)' on a null object reference
エラーが出る。
コード上のインスタンス生成時にcontext
が生成されてないので、NullPointerExeption
になる。
回避するのなら>https://qiita.com/old_cat/items/ff4f2116192fd536fb59
に記載の通り、コールバックメソッドを実装してcontextを扱う。
SampleActivity
Context context;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContantView(R.layout.sample);
context = getApplicationContext();
AsyncTaskCallBack asyncTaskCallBack = new AsyncTaskCallBack();
AsyncTask asyncTask = new AsyncTask(asyncTaskCallBack);
}
public class AsyncTaskCallBack(){
// ここでfileOutputStreamを使ってもOK
// でも他のメソッドを呼び出してみる
public void one(){
fileWriter();
}
}
public void fileWrite(){
try{
openFileOutput("fileName",Context.MODE_APPEND);
}
}
AsyncTask
SampleActivity.AsyncTaskCallBack asyncTaskCallBack;
public AsyncTask(SampleActivity.AsyncTaskCallBack asyncTaskCallBack){
this.asyncTaskCallBack = asyncTaskCallBack;
}
@Override
protected void onPostExecute(String s){
super.onPostExecute(s);
asyncTaskCallBack.one();
}