2017-07-31 127 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; 
} 

希望有人能幫助:-)

回答

0

對於你需要在你的代碼的serialVersionUID的可序列化對象。檢查文檔:http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html

+0

似乎它不工作,同樣的錯誤 我剛剛添加「私人靜態最終long serialVersionUID = 1L;」在我的課 –

+0

它說:「因此,爲了保證跨不同的java編譯器實現一致的serialVersionUID值,一個可序列化的類必須聲明一個顯式的serialVersionUID值。」 –

相關問題