解决NotSerializableException

时间:2012-08-23 12:48:08

标签: android

我对Java很新,我似乎无法解决我收到的这个NotSerializableException。我正在将一个对象写入用户的SD卡,接下来我需要将其读回来。

这是我的代码:

@Override
protected void createAndAttachView(int id, FrameLayout frame) {

    //Read the panel from the memory
    PanelWrapper pnl = (PanelWrapper) readObjectFromMemory(B4AHelper.getDirDefaultExternal(), "layout.frame");

    //Add the view
    frame.addView(pnl.getObject());

    //Broadcast an intent to the user.
    intent = new IntentWrapper();
    intent.Initialize("createAndAttachView", "");
    intent.PutExtra("id", id);
    intent.PutExtra("message", "View Attached");
    sendBroadcast(intent.getObject());

    //Log - debugging
    Log.i("B4A", "View attached!");
}

我使用here中的readObjectFromMemorywriteObjectFromMemory,这就是错误:

Error Message: anywheresoftware.b4a.BALayout


Error Message: Read an exception; java.io.NotSerializableException: anywheresoftware.b4a.BALayout

Caused by: java.lang.NullPointerException
    at com.rootsoft.standout.MostBasicWindow.createAndAttachView(MostBasicWindow.java:53)
    at com.rootsoft.standout.StandOutWindow$Window.<init>(StandOutWindow.java:2213)
    at com.rootsoft.standout.StandOutWindow.show(StandOutWindow.java:1416)
    at com.rootsoft.standout.StandOutWindow.onStartCommand(StandOutWindow.java:716)
    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2359)
    ... 10 more

我想是否有可能尽可能好地解释,因为我相当新,这也可以帮助其他人。

1 个答案:

答案 0 :(得分:2)

在这里,您可以阅读Java中的序列化。

http://java.sun.com/developer/technicalArticles/Programming/serialization/

简而言之,可序列化对象具有从类的成员字段和方法生成的名为static long的{​​{1}}字段。它用于检查类的定义是否匹配。

例如,您有一个serialVersionUID对象,您将其作为Serializeable写入文件,并且您希望稍后再阅读它。如果在此期间您更改了类中的某些字段或方法(例如,文件中的类定义,并且当前使用的类定义不再相同),那么java可以从无效的UID中发现这些差异会知道,虽然它们可能是同一类型,但它们并不兼容。

当然,您也可以指定默认的UID,或者如果您知道这种情况不会确定,则可以将其留空。

至于摆脱你的异常,你只需要在你的类中实现byte[]接口(在你的情况下为anywheresoftware.b4a.BALayout)。