编辑:想出来,如果您遇到类似问题,请查看我发布的答案。
我知道这个问题有几个问题,但他们的解决方案都没有对我有用。
在我的模型类中,我确保使用List而不是Arraylist来避免Firebase问题,但我仍然遇到此错误。这是很多代码,但大多数问题要求所有代码,所以我会发布所有代码。
TemplateModelClass.java
//
我已成功多次使用此基本模型。对于
HashMaps<String, List<String>>,
String是一个转换为String的递增Integer。列表只是列表中的字符串。这是来自Firebase的一些示例JSON:
//
尽我所能格式化。如果你需要它的图片让我知道,我会得到一个截图
我收到此错误,如标题中所述:
com.google.firebase.database.DatabaseException: Expected a Map while deserializing, but got a class java.util.ArrayList
关于这一问题最受欢迎的问题似乎与使用整数作为键的问题有关,但我想我总是使用转换为字符串的整数来避免这种情况。它可能会奇怪地解释它,所以我会在此期间尝试更多的东西。谢谢你的阅读!
答案 0 :(得分:1)
主要问题是您使用的是if
而不是List
。正如您的错误所述,虽然反序列化它是Map
,但却找到了Map
。
因此,为了解决这个问题,您需要使用以下地图更改模型中的所有列表:
ArrayList
更改所有这些文件后,您还需要更改公开private Map<String, Object> mMapOne;
和setters
。
希望它有所帮助。
答案 1 :(得分:0)
好吧,想通了。如果有人读这个有这个问题并使用递增的ints / longs /无论转换为字符串,你必须在转换后的int中添加一些字符。如果可以转换,Firebase显然会将这些密钥转换回非字符串。
例如,如果您执行以下操作:
int inc = 0;
inc++; // 1
map.put(String.valueOf(inc), someList);
Firebase将该密钥解释为1而不是&#34; 1&#34;。
因此,要强制Fb作为字符串进行解释,请执行以下操作:
int inc = 0;
inc++; // 1
map.put(String.valueOf(inc) + "_key", someList);
一切都很完美。显然,如果你还需要将这些字符串读回int,只需将字符串拆分为&#34; [_]&#34;而且你很高兴去。