LoginSignup
0
0

More than 3 years have passed since last update.

51歳からの(現52)プログラミング 備忘 FileOutputStream android.content.Context.openFileOutput(java.lang.String, int)' on a null object reference

Last updated at Posted at 2020-02-28

こんなコードがあったとする

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();
}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0