在扩展ArrayList时从Firebase获取价值

时间:2017-03-06 11:07:43

标签: android firebase arraylist firebase-realtime-database

我正在尝试使用Firebase和列表。

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

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

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

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

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

这引发了一个例外

  

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

唯一可行的方法是恢复ArrayList<Foo>而不是从另一个类扩展它。

有没有其他可能的方法可以毫无问题地投射? 提前谢谢。

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

用户addEventValueListener获取特定参考的arraylist