在扩展 ArrayList 时从 Firebase 获取价值

Posted

技术标签:

【中文标题】在扩展 ArrayList 时从 Firebase 获取价值【英文标题】:Get value from Firebase while extending ArrayList 【发布时间】: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;,而不是从另一个类扩展它。

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

【问题讨论】:

【参考方案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);

以上是关于在扩展 ArrayList 时从 Firebase 获取价值的主要内容,如果未能解决你的问题,请参考以下文章

填充collectionView单元格图像时从Firebase加载错误的照片并非每次都发生

如何在我的 recyclerview 中使用 cardview 设置 onclick 侦听器,并在单击 recyclerview 时从 firebase 数据库中检索数据?

从子列表中删除对象已删除的android

未在 Firebase 中创建字符串的 Arraylist

从 Firebase 查询具有在 ArrayList 中找到的子值的对象

Android:使用 ArrayList 从 Firebase 检索对象