2017-03-26 71 views
0

正如How to return hashmap in an aidl file線程討論,我返回「地圖」,並沒有泛型映射像「地圖」或類似一個HashMap地圖的實現。當我檢查綁定的服務端輸出時,我會在地圖中獲取所需的鍵值,即地圖填充正確。但在服務端相同的功能,從客戶端調用時,會返回一個空的地圖,因爲我初始化我的地圖服務如:的Android AIDL:返回地圖工作在服務的水平,但在休息客戶端級別

Map myMap = new HashMap(); 

請注意,客戶服務合同是良好的服務有一些其他返回布爾值的方法,其中一些是無效的。他們都正常工作。問題是這個方法返回一個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; 
    } 
} 

有人可以幫指出的錯誤嗎?

+0

應該,如果'MyList'不是空的,是嗎?試圖'Log.d'是'MyList'的大小? – pskink

+0

已驗證,MyList不爲空。當直接從服務應用程序端調用服務方法時,正確的填充地圖會返回,只有從客戶端應用程序調用時纔會出現問題。 –

+0

然後進行測試只需調用'myMap.put( 「鍵」, 「值」);',然後再試一次 – pskink

回答

0

我就是這樣做兩件事情,並且解決了這個腥行爲(腥,因爲在同一個服務器 - 客戶端代碼是工作在我的虛擬客戶機和服務器的Android應用程序,但不工作我的生產客戶端和服務器應用上):

    在服務器和客戶端
  1. 不同AIDL文件:我注意到,在客戶端的AIDL文件爲的是在服務器端的一個超集(在客戶端的接口有3種方法,而在服務器端2種方法)
  2. 清洗所有環境:REB以前做一個乾淨的構建構建我的所有AIDL,客戶端,服務器模塊/組件。

雖然第一點對我來說仍然不合乎邏輯,但我想記下這個答案供人們評論,如果它可能會在這種情況下有任何問題。

相關問題