2017-03-01 12 views
-1

HashMapのリストから値を取得しようとしています。Android - 2d HashMapから値を取得

int star_level_2 = value["user_90"]["levels_stars"]["level_2"]; 
:どのように私は使用して値を得るために HashMapを変換することができ

HashMap value = (HashMap) dataSnapshot.getValue(); 

を:リストは、多次元であると同じように見えます:私が使用してfirebaseデータベースからリストを取得

{user_90= { 
levels_win={level_2=true, level_1=true}, 
levels_stars={level_2=3, level_1=2} 
}} 

答えて

0

残念なことにあなたのために(そして幸いにも他の多くの人にとっては)Javaは静的に厳密に型指定された言語なので、そのようには機能しません。また、(ほとんどの人にとっては不幸なことですが)intなどのプリミティブ型を標準コレクションに直接格納することはできません。そして最後に、Javaは演算子のオーバーライドをサポートしていないので、ユーザーは "[" "]"キーでMapの値にアクセスすることはできません。

それでは、あなたにできることは、明示的な

HashMap<String, HashMap<String, HashMap<String, Object>>> container = (HashMap<>) dataSnapshot.getValue(); 
int star_level_2 = (Integer)(value.get("user_90").get("levels_stars").get("level_2")); 

として、あなたのタイプを指定して、あなたのデータ構造は、内側のオブジェクトの異なる深さを持っている場合は、よくあなたは、このアプローチには運の外で、あなたがする必要があります結果を各レベルのgetの後に特定のデータ型にキャストします。

+0

あなたの答えをありがとう、それは私が手作業で各値のデータをキャストしようとしている何時間もしても損をしないと思っていたものです – SNos

+0

@SNos、あなたのコードを単純化するためにJackson ObjectMapper書きます。 http://stackoverflow.com/questions/32848024/android-firebase-2-4-illegalstateexception-using-new-ref-updatechildrenを参照してください。自分で試したことはありませんが、同じアプローチを使用してマップすることができますオブジェクトをFirebaseから戻します。 'user_90'のような索引ではなく固定名のキーを持つようにデータ構造を変更する必要があることに注意してください – SergGr

関連する問題