How to return hashmap in an aidl fileスレッドで説明したように、「Map」のようなジェネリックマップではなく、MapのようなマップやHashmapのようなMapの実装です。バインドされたサービス側の出力を確認すると、マップに必要なKey-Valueが取得されます。つまり、マップに正しく入力されます。私はのようなサービスで、私の地図を初期化するので、しかし、サービス側で同じ機能は、クライアント側から呼び出された場合、空のMapを返します。サービスは他を持っているようAndroid AIDL:Returning Mapはサービスレベルで動作しますが、クライアントレベルで破損します
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;
}
}
誰かがここに間違いを指摘助けることができますか?
もし 'MyList'が空でないなら、それはすべきでしょうか? 'MyList'のサイズを' Log.d'にしようとしましたか? – pskink
MyListが空ではないことを確認しました。また、サービスアプリケーション側からサービスメソッドを直接呼び出すと、適切な実装済みマップが返されます。問題は、クライアントアプリケーションから呼び出されたときにのみ発生します。 –
'myMap.put(" key "、" value ");'を呼び出してもう一度やり直してください – pskink