ArraList<MyClass>
を内部ストレージに保存します。ですから、ArrayListとMyClassを持つクラスにSerializableを実装しました。コードは次のようになります。シリアル化されたArrayListを保存すると、AndroidでNotSerializableExceptionがスローされる
public class CustomAdapter extends BaseAdapter implements Serializable {
public ArrayList<TaskItems> taskList = new ArrayList<TaskItems>();
// some fields and variables
// some methods which use below method saveFile()
public void saveFile() {
try {
String filename = "daytodaytasks";
FileOutputStream fileOutputStream = mContext.openFileOutput(filename, Context.MODE_PRIVATE);
//mContext is MainActivity context
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(taskList);
objectOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
class TaskItems implements Serializable {
String smallRectUpText;
String smallRectDownText;
String bigRectText;
}
}
クラスには、saveFile()メソッドを使用するメソッドがあります。すべてのメソッドは、クラス参照を使用してMainActivity onClick()メソッドから呼び出されます。私は、プログラムを実行し、ボタンを押してのonClickメソッドを使用するとき、私は得る:
java.io.NotSerializableException: com.something.MainActivity
だから私はMainActivityにSerializableを実装しようとしたが、その後私はMainActivityが延びAppCompatAcitvity、から同じ例外が発生しました。私たちを手伝ってくれますか ?
これは動作しますが、なぜTaskItemsクラスがCustomAdapterにアクセスするのか分かりません。それは文脈へのいかなる参照も持たない。 – Michal
クラスTaskItemsは内部クラスなので、CustomAdapterを使用して外部クラスメンバ変数にアクセスできます。クラスTaskItemsを静的にすることによって、外部クラスのメンバ変数へのアクセスを防ぎます。 – Raman