2017-03-01 84 views
-1

我想从HashMap列表中获取一些值。这份名单是多方面的,它看起来像:Android - 从2d获取值HashMap

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

我用得到火力数据库列表:

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

我怎么能转换HashMap为了利用获得的值:

int star_level_2 = value["user_90"]["levels_stars"]["level_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