Android AIDL:返回地图在服务级别工作但在客户端级别中断

Android AIDL: Returning Map works at service level but breaks at client level

正如在 How to return hashmap in an aidl file 线程中所讨论的,我返回 "Map" 而不是像 "Map" 这样的泛型映射或像 Hashmap 这样的 Map 实现。当我检查绑定的服务端输出时,我在地图中获得了所需的键值,即地图已正确填充。但是服务端的相同功能,当从客户端调用时,returns 一个空映射,因为我在服务中将我的映射初始化为:

Map myMap = new HashMap();

请注意,客户端服务合同很好,因为该服务还有其他 returns 布尔值的方法,其中一些是无效的。所有这些都正常工作。问题出在这个返回 Map 的方法上,我想我犯了一些语法错误。

下面是我的服务端实现:

public Map getStatus() {
    List<MyObject> MyList = new ArrayList<>();
    if (myDaggerInjectedObject != null) {
        MyList = myDaggerInjectedObject.getMyList();
    }
    Map myMap = new HashMap();
    for (MyObject myObject : MyList) {
        myMap.put(myObject.getScannableId(), myObject.getStatus().name());
    }
    return myMap;
}

下面是调用上述绑定服务方法的客户端代码:

public Map getStatus() throws RemoteException {
    try {
        Map status = myService.getStatus();
        // the status object is set to blank hashmap, it should have some data i.e key-value pair
        return status;
    } catch (RemoteException e) {
        Log.e(TAG, "Service connection not available");
        throw e;
    }
}

谁能帮忙指出这里的错误?

我只做了两件事就解决了这个可疑行为(可疑是因为相同的服务器-客户端代码在我的虚拟客户端和服务器 android 应用程序上工作,但在我的生产客户端和服务器应用程序上不起作用) :

  1. 服务器端和客户端的AIDL文件不同: 我注意到客户端的AIDL文件是服务器端AIDL文件的超集(客户端的接口有3方法,而在服务器端有 2 种方法)
  2. 清理所有环境:在重建我所有的 AIDL、客户端、服务器之前进行了清理构建 modules/Components。

虽然第一点对我来说仍然完全不合逻辑,但我想记下这个答案供人们评论,如果它在这种情况下可能有任何问题。