我对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中的readObjectFromMemory
和writeObjectFromMemory
,这就是错误:
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
我想是否有可能尽可能好地解释,因为我相当新,这也可以帮助其他人。
答案 0 :(得分:2)
在这里,您可以阅读Java中的序列化。
http://java.sun.com/developer/technicalArticles/Programming/serialization/
简而言之,可序列化对象具有从类的成员字段和方法生成的名为static long
的{{1}}字段。它用于检查类的定义是否匹配。
例如,您有一个serialVersionUID
对象,您将其作为Serializeable
写入文件,并且您希望稍后再阅读它。如果在此期间您更改了类中的某些字段或方法(例如,文件中的类定义,并且当前使用的类定义不再相同),那么java可以从无效的UID中发现这些差异会知道,虽然它们可能是同一类型,但它们并不兼容。
当然,您也可以指定默认的UID,或者如果您知道这种情况不会确定,则可以将其留空。
至于摆脱你的异常,你只需要在你的类中实现byte[]
接口(在你的情况下为anywheresoftware.b4a.BALayout)。