0
我想保存一些自己的對象在文件中,並重新加載它時,應用程序重新打開。 保存工作沒有問題。我用下面的「在onPause」 - 方法:從ObjectInputStream讀取拋出IllegalAccessException
FileOutputStream fos = this.openFileOutput(fileName, Context.MODE_PRIVATE);
ObjectOutputStream os = new ObjectOutputStream(fos);
os.writeObject(buttonList);
os.flush(); os.close();
fos.flush(); fos.close();
當我想從我用「的onResume」 - 方法「下面的文件重新加載我的對象:
FileInputStream fis = this.openFileInput(fileName);
ObjectInputStream is = new ObjectInputStream(fis);
ArrayList<buttonObject> neueListe = (ArrayList<buttonObject>) is.readObject();
is.close(); fis.close();
完整的錯誤:
07-31 14:09:52.774 W/System.err: java.io.InvalidClassException: android.support.v7.widget.AppCompatButton; IllegalAccessException
07-31 14:09:52.775 W/System.err: at java.io.ObjectStreamClass.resolveConstructorClass(ObjectStreamClass.java:712)
07-31 14:09:52.775 W/System.err: at java.io.ObjectStreamClass.newInstance(ObjectStreamClass.java:673)
07-31 14:09:52.775 W/System.err: at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1796)
07-31 14:09:52.775 W/System.err: at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:761)
07-31 14:09:52.775 W/System.err: at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1983)
07-31 14:09:52.775 W/System.err: at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1940)
07-31 14:09:52.775 W/System.err: at java.util.ArrayList.readObject(ArrayList.java:661)
07-31 14:09:52.775 W/System.err: at java.lang.reflect.Method.invoke(Native Method)
07-31 14:09:52.775 W/System.err: at java.io.ObjectInputStream.readObjectForClass(ObjectInputStream.java:1330)
07-31 14:09:52.775 W/System.err: at java.io.ObjectInputStream.readHierarchy(ObjectInputStream.java:1242)
07-31 14:09:52.775 W/System.err: at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1835)
07-31 14:09:52.775 W/System.err: at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:761)
07-31 14:09:52.775 W/System.err: at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1983)
07-31 14:09:52.775 W/System.err: at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1940)
07-31 14:09:52.775 W/System.err: at com.example.dgroh.cownt.MainActivity.onPause(MainActivity.java:67)
07-31 14:09:52.775 W/System.err: at android.app.Activity.performPause(Activity.java:6371)
07-31 14:09:52.776 W/System.err: at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1334)
07-31 14:09:52.776 W/System.err: at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3391)
07-31 14:09:52.776 W/System.err: at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3364)
07-31 14:09:52.776 W/System.err: at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3339)
07-31 14:09:52.776 W/System.err: at android.app.ActivityThread.-wrap13(ActivityThread.java)
07-31 14:09:52.776 W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1368)
07-31 14:09:52.776 W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
07-31 14:09:52.776 W/System.err: at android.os.Looper.loop(Looper.java:148)
07-31 14:09:52.776 W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5459)
07-31 14:09:52.776 W/System.err: at java.lang.reflect.Method.invoke(Native Method)
07-31 14:09:52.776 W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
07-31 14:09:52.776 W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
這是我的 「buttonObject」 類:
public class buttonObject extends android.support.v7.widget.AppCompatButton implements Serializable {
// empty constructor
public buttonObject() {
super(MainActivity.getAppContext());
}
// normal constructor
public buttonObject(Context context){
super(context);
}
MainActivity的上下文來自MainActivity中的變量,由此函數共享。在這個變量保存「getApplicationContext()」
// Share Context-Function
public static Context getAppContext() {
return MainActivity.context;
}
希望有人能幫助:-)
似乎它不工作,同樣的錯誤 我剛剛添加「私人靜態最終long serialVersionUID = 1L;」在我的課 –
它說:「因此,爲了保證跨不同的java編譯器實現一致的serialVersionUID值,一個可序列化的類必須聲明一個顯式的serialVersionUID值。」 –