【发布时间】:2017-03-26 14:14:27
【问题描述】:
正如How to return hashmap in an aidl file 线程中所讨论的,我返回的是“Map”,而不是像“Map”这样的泛型映射或像Hashmap 这样的Map 实现。当我检查绑定的服务端输出时,我在地图中获得了所需的键值,即正确填充了地图。但是服务端的同一个函数,当从客户端调用时,返回一个空地图,因为我在服务中将我的地图初始化为:
Map myMap = new HashMap();
请注意,客户端服务合同是好的,因为服务有其他返回布尔值的方法,其中一些是无效的。他们都工作正常。问题只是这个返回地图的方法,我想我在做一些语法错误。
以下是我的服务端实现:
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;
}
}
有人可以帮忙指出这里的错误吗?
【问题讨论】:
-
它应该,如果
MyList不为空,是吗?试过Log.dMyList的大小? -
已验证,MyList 不为空。当直接从服务应用程序端调用服务方法时,会返回正确的填充地图,只有从客户端应用程序调用时才会出现问题。
-
然后进行测试只需调用
myMap.put("key", "value");并重试 -
myObject.getScannableId()和myObject.getStatus().name()返回什么类型? -
@Vasiliy,这两个都返回字符串。此外,正如我所提到的,当从服务端本身调用方法时,映射正确地填充了字符串键值。