2017-03-26 22 views
0

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

誰かがここに間違いを指摘助けることができますか?

+0

もし 'MyList'が空でないなら、それはすべきでしょうか? 'MyList'のサイズを' Log.d'にしようとしましたか? – pskink

+0

MyListが空ではないことを確認しました。また、サービスアプリケーション側からサービスメソッドを直接呼び出すと、適切な実装済みマップが返されます。問題は、クライアントアプリケーションから呼び出されたときにのみ発生します。 –

+0

'myMap.put(" key "、" value ");'を呼び出してもう一度やり直してください – pskink

答えて

0

私は二つのことをやったし、(同じサーバ・クライアント・コードは私のダミークライアントとサーバーのAndroidアプリに取り組んでいますが、私の本番クライアントとサーバアプリに働いていなかったので、うさんくさい)それは、この魚の行動を解決:

  1. サーバーとクライアントのAIDLファイルが異なる:クライアント側のAIDLファイルがサーバー側のAIDLファイルであることがわかりました(クライアント側のインターフェイスにはサーバー側の2つの方法で3つの方法がありました)
  2. すべての環境のクリーニング:リビルド前にクリーンなビルドを実行しましたかすべてのAIDL、クライアント、サーバーモジュール/コンポーネントのインストール。

最初の点はまだ私にとってまだ論理的ではありませんが、このシナリオでは問題があるとすれば、この回答で意見を述べることにしました。

関連する問題