首页 文章

Firebase数据库错误 - 反序列化时预期映射,但得到了一个类java.util.ArrayList

提问于
浏览
0

Edit: Figured it out, check my posted answer if you're having similar issues.

我知道这个问题有几个问题,但他们的解决方案都没有对我有用 .

在我的模型类中,我确保使用List而不是Arraylist来避免Firebase问题,但我仍然遇到此错误 . 这是很多代码,但大多数问题要求所有代码,所以我会发布所有代码 .

TemplateModelClass.java

//

我成功地使用过这个基本模型很多次了 . 为了

HashMaps<String, List<String>>,

String是一个递增的Integer,转换为String . 列表只是列表中的字符串 . 以下是Firebase的一些示例JSON:

//

格式化尽可能最好 . 如果你需要它的图片让我知道,我会得到一个截图

我收到这个错误,正如 Headers 中所述:

com.google.firebase.database.DatabaseException: Expected a Map while deserializing, but got a class java.util.ArrayList

关于这一问题最受欢迎的问题似乎与使用整数作为键的问题有关,但我想我总是使用转换为字符串的整数来避免这种情况 . 它可能会奇怪地解释它,所以我会在此期间尝试更多的东西 . 谢谢阅读!

2 回答

  • 1

    主要问题是您使用的是 List 而不是 Map . 正如您的错误所述,虽然反序列化它是预期的 Map 但是被发现 ArrayList .

    因此,为了解决这个问题,您需要使用以下映射更改模型中的所有列表:

    private Map<String, Object> mMapOne;
    

    更改所有这些文件后,您还需要更改您的公共 settersgetters .

    希望能帮助到你 .

  • 0

    好吧,想通了 . 如果有人读这个有这个问题,并且使用递增的ints / longs /无论转换为字符串,你必须在转换的int中添加一些字符 . 如果可以转换,Firebase显然会将这些密钥转换回非字符串 .

    例如,如果您执行以下操作:

    int inc = 0;
    inc++; // 1
    map.put(String.valueOf(inc), someList);
    

    Firebase将该密钥解释为1而不是“1” .

    因此,要强制Fb作为字符串进行解释,请执行以下操作:

    int inc = 0;
    inc++; // 1
    map.put(String.valueOf(inc) + "_key", someList);
    

    一切都很完美 . 显然,如果你还需要将这些字符串读回到int中,只需将字符串拆分为“[_]”,就可以了 .

相关问题