2017-07-31 10 views
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を必要とする直列化可能オブジェクトの場合

答えて

0
+0

はそれdoesntの仕事のように思える、同じエラー 私はちょうど追加「プライベート静的最終長いserialVersionUIDの= 1L;」:ドキュメントを確認してください私のクラス –

+0

それは、 "したがって、異なるjavaコンパイラの実装間で一貫したserialVersionUID値を保証するために、直列化可能なクラスは明示的なserialVersionUID値を宣言する必要があります。 –

関連する問題