【问题标题】:Get value from Firebase while extending ArrayList在扩展 ArrayList 时从 Firebase 获取价值
【发布时间】:2017-07-26 05:29:11
【问题描述】:

我正在尝试使用 Firebase 和 Lists。

我的对象包含一个扩展 ArrayList 的类,例如:

MyClass {
    // other fields here
    public static class List extends ArrayList<Foo> {};
}

如果我尝试将 List 项目上传到 Firebase 数据库,它开箱即用,不会遇到任何问题。

当我尝试从服务器检索这些Lists 时出现问题,例如:

MyClass mMyClass = dataSnapshot.getValue(MyClass.class);

这会引发异常

com.google.firebase.database.DatabaseException:无法将 java.util.ArrayList 类型的对象转换为 mypackage.MyClass$List 类型

对我有用的唯一可能的事情是恢复到ArrayList&lt;Foo&gt;,而不是从另一个类扩展它。

还有其他没有问题的投射方式吗? 提前致谢。

【问题讨论】:

    标签: android firebase arraylist firebase-realtime-database


    【解决方案1】:

    尝试使用GenericTypeIndicator 将列表数据作为通用集合读取:

    GenericTypeIndicator<MyClass.List> t = new GenericTypeIndicator<MyClass.List>() {};
    MyClass.List mList = dataSnapshot.getValue(t);
    

    我不确定这是否适用于内部类。您可能需要将List 声明为其自己的独立类型。有关更多示例,请参阅this question

    【讨论】:

    • 谢谢!正是我想要的
    • 我很好奇如果你的通用列表成为你想要阅读的课程的成员,这对你来说是如何解决的。我寻找解决方案,但只找到this unanswered question.
    【解决方案2】:

    您是否尝试将值作为 ArrayList 获取,然后将其转换为您的类。 类似的东西:

    MyClass mMyClass = (MyClass) dataSnapshot.getValue(ArrayList.class);

    【讨论】:

    • 我的问题是“List”类在我传递给“getValue()”方法的类中
    【解决方案3】:

    用户addEventValueListener 获取特定引用的arraylist

    【讨论】:

    • 对不起,我把它从帖子中删掉了,因为我认为它是样板文件,我已经在 ValueEventListener 中这样做了。
    • 那么会发生什么..?
    • 正如问题所说,我收到了 DatabaseException,因为 firebase 试图将 ArrayList 转换为扩展 ArrayList 的 List 类
    • 直接使用dataSnapshot.getValue(List.class);
    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 2020-09-14
    • 1970-01-01
    相关资源
    最近更新 更多