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;
}
ホープ誰かがあなたのコード内のserialVersionUIDを必要とする直列化可能オブジェクトの場合
はそれdoesntの仕事のように思える、同じエラー 私はちょうど追加「プライベート静的最終長いserialVersionUIDの= 1L;」:ドキュメントを確認してください私のクラス –
それは、 "したがって、異なるjavaコンパイラの実装間で一貫したserialVersionUID値を保証するために、直列化可能なクラスは明示的なserialVersionUID値を宣言する必要があります。 –