私はこのようなEvent
プライベートを定義するクラスを持っていますHashMap
:
private Map<String, Object> data = new HashMap<String, Object>();
Event
クラスは、あらゆる種類の「イベント」のためにラップされています。これHashMap
には、キーによって参照される任意のオブジェクトインスタンスを含めることができます。インスタンスを受け取るクラスは、Event
どのクラスが各キーに関連しているかを知っているためObject
、対応するサブクラスに安全にキャストできます。
Event
2つのプロセス間でインスタンスを渡そうとすると、問題が発生します。Event
を実装して、 :Parcelable
を介して送信できるようにします。Message
Bundle bundle = new Bundle();
bundle.putParcelable(Event.BUNDLE_KEY, event);
// Make the message with the bundle
Message message = new Message();
message.setData(bundle);
マーシャリングを解除する場合:
public void readFromParcel(Parcel in) {
idEvent = in.readInt();
priority = in.readInt();
idSource = in.readInt();
idDestination = in.readInt();
action = in.readInt();
Bundle mapBundle = in.readBundle();
if (mapBundle.getSerializable(MAP_KEY) instanceof HashMap) {
data = (Map<String, Object>) mapBundle.getSerializable(MAP_KEY);
} else {
Log.e(TAG, "Parcel reading error: not a HashMap");
}
}
問題は、mapBundle
どちらClassLoader
を使用するかを指定する必要があるため、これが機能しないことmapBundle.setClassLoader(Entity.class.getClassLoader());
です。しかしObject
、どのサブクラスが含まれるのかわかりませんHashMap
...
これは私が思ったことです:
ClassLoader
これらのクラスのいずれかをロードするを記述します。byte[]
問題は、オブジェクトが。内にあるため、オブジェクトを表す方法を取得できないことHashMap
です。そしてmapBundle.getSerializable()
、それは正確にClassNotFound
例外をスローするので、私はそれを取得するために使用することはできません。にあるクラスを知ることができるように、いくつかの追加情報を渡します
HashMap
。ClassNotFound
これは冗長な情報のように見えますが、バンドルに1つのクラスローダーを設定すると、他のクラスにも例外がスローされるため、まだ問題はありません...
この問題について助けていただければ幸いです。前もって感謝します!