在扩展 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 数据库,它开箱即用,不会遇到任何问题。
当我尝试从服务器检索这些List
s 时出现问题,例如:
MyClass mMyClass = dataSnapshot.getValue(MyClass.class);
这会引发异常
com.google.firebase.database.DatabaseException:无法将 java.util.ArrayList 类型的对象转换为 mypackage.MyClass$List 类型
对我有用的唯一可能的事情是恢复到ArrayList<Foo>
,而不是从另一个类扩展它。
还有其他没有问题的投射方式吗? 提前致谢。
【问题讨论】:
【参考方案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 试图将 ArrayListdataSnapshot.getValue(List.class);
以上是关于在扩展 ArrayList 时从 Firebase 获取价值的主要内容,如果未能解决你的问题,请参考以下文章
填充collectionView单元格图像时从Firebase加载错误的照片并非每次都发生
如何在我的 recyclerview 中使用 cardview 设置 onclick 侦听器,并在单击 recyclerview 时从 firebase 数据库中检索数据?