From ee6c77d73db415ef282a9bfc95f58f9708095fec Mon Sep 17 00:00:00 2001 From: jrfeng <jrfeng331@qq.com> Date: Sun, 9 Aug 2020 08:14:13 +0800 Subject: [PATCH] fix bug: 'Class not found when unmarshalling: channel.helper.pipe.MapWrapper' --- .../channel/helper/pipe/MessengerPipe.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/pipe/src/main/java/channel/helper/pipe/MessengerPipe.java b/pipe/src/main/java/channel/helper/pipe/MessengerPipe.java index 092702c..4e6e123 100644 --- a/pipe/src/main/java/channel/helper/pipe/MessengerPipe.java +++ b/pipe/src/main/java/channel/helper/pipe/MessengerPipe.java @@ -1,5 +1,6 @@ package channel.helper.pipe; +import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.Looper; @@ -55,6 +56,7 @@ */ public class MessengerPipe extends Handler implements Emitter { private static final String TAG = "MessengerPipe"; + private static final String KEY_MAP_WRAPPER = "map_wrapper"; private Messenger mMessenger; private Dispatcher mDispatcher; @@ -89,7 +91,11 @@ public void handleMessage(@NonNull Message msg) { @Override public void emit(Map<String, Object> data) { Message message = Message.obtain(); - message.obj = new MapWrapper(data); + + Bundle bundle = new Bundle(); + bundle.putParcelable(KEY_MAP_WRAPPER, new MapWrapper(data)); + + message.setData(bundle); try { mMessenger.send(message); @@ -99,18 +105,21 @@ public void emit(Map<String, Object> data) { } private Map<String, Object> getData(Message dataWrapper) { - if (dataWrapper.obj == null) { + Bundle bundle = dataWrapper.getData(); + + if (bundle == null) { Log.d(TAG, "dataWrapper is empty."); return new HashMap<>(); } - if (!(dataWrapper.obj instanceof MapWrapper)) { + bundle.setClassLoader(MapWrapper.class.getClassLoader()); + MapWrapper mapWrapper = bundle.getParcelable(KEY_MAP_WRAPPER); + + if (mapWrapper == null) { Log.d(TAG, "dataWrapper is empty."); return new HashMap<>(); } - MapWrapper mapWrapper = (MapWrapper) dataWrapper.obj; - return mapWrapper.getMap(); }