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();
     }