Ich möchte ArraList<MyClass>
in internen Speicher speichern. Also habe ich Serializable in die Klasse implementiert, die die ArrayList und auch die MyClass hat. Der Code sieht wie folgt aus:Speichern serialisierte ArrayList wirft NotSerializableException in Android
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;
}
}
In der Klasse CustomAdapter gibt es Methoden, die savefile() -Methode verwenden. Alle Methoden werden von der Methode MainActivity onClick() mit Klassenreferenz aufgerufen. Wenn ich das Programm verwenden, onClick Methode laufen durch Knopfdruck erhalte ich:
java.io.NotSerializableException: com.something.MainActivity
Also versuchte ich Serializable zu MainActivity, zu implementieren, aber dann bekam ich die gleiche Ausnahme von AppCompatAcitvity, die MainActivity erstreckt. Kannst du mir helfen ?
Es funktioniert, aber ich bekomme nicht, warum Klasse TaskItems auf CustomAdapter.this zugreifen. Es hat keinen Bezug zum Kontext. – Michal
Klasse TaskItems ist innere Klasse, daher hat es Zugriff auf äußere Klassenmitgliedsvariablen mit CustomAdapter.this, indem wir die Klasse TaskItems statisch machen, verhindern wir den Zugriff von Membervariablen der äußeren Klasse. – Raman