0

私はJavaにかなり慣れていないので、NotSerializableException受け取ったこれを解決できないようです。ユーザーの sdcard にオブジェクトを書き込んでいますが、次にそれを読み取る必要があります。

これは私のコードです:

@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!");
}

ここからreadObjectFromMemoryandを使用していますが、これはエラーです: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

私はかなり新しいので、できるだけうまく説明できればいいのですが、これは他の人にも役立つかもしれません.

4

1 に答える 1

2

ここでは、一般的な Java でのシリアル化について読むことができます。

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

簡単に言えば、シリアライズ可能なオブジェクトには、クラスのメンバー フィールドとメソッドから生成されたstatic longという名前のフィールドがあります。serialVersionUIDクラスの定義が一致するかどうかを確認するために使用されます。

たとえば、Serializeableオブジェクトがあり、それをファイルに書き込んで、byte[]後で読み返したいとします。その間、クラスのいくつかのフィールドまたはメソッドを変更した場合 (たとえば、ファイル内のクラス定義と現在使用されているクラス定義が同じではない場合)、Java は無効な UID からこれらの違いを検出できます。それらは同じタイプかもしれませんが、互換性がないことがわかります。

もちろん、デフォルトの UID を割り当てることもできます。または、そのようなシナリオが確実に発生しないことがわかっている場合は、空白のままにすることもできます。

例外を取り除くにはSerializable、問題のクラスにインターフェースを実装するだけです(あなたの場合はanywheresoftware.b4a.BALayout)。

于 2012-08-23T12:58:58.077 に答える