私はこのようなEventプライベートを定義するクラスを持っていますHashMap:
private Map<String, Object> data = new HashMap<String, Object>();
Eventクラスは、あらゆる種類の「イベント」のためにラップされています。これHashMapには、キーによって参照される任意のオブジェクトインスタンスを含めることができます。インスタンスを受け取るクラスは、Eventどのクラスが各キーに関連しているかを知っているためObject、対応するサブクラスに安全にキャストできます。
Event2つのプロセス間でインスタンスを渡そうとすると、問題が発生します。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つのクラスローダーを設定すると、他のクラスにも例外がスローされるため、まだ問題はありません...
この問題について助けていただければ幸いです。前もって感謝します!