如何从 Android 上的 Firebase DataSnapshot 中提取对象列表

新手上路,请多包涵

我想将所有 Firebase DataSnapshot 孩子转换为 android 中的列表。

像这样的东西:

 mFirebaseRef = new Firebase(FIREBASE_URL);

mFirebaseRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> td = (ArrayList<String>) dataSnapshot.getValue();
        //notifyDataSetChanged();
    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {

    }
});

原文由 Parth Vyas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 523
1 个回答

这是我的 2 美分贡献(在 Kotlin 中):

     private fun getData(childUid:String) {

    refDB = firebaseDB.reference.child(MAIN_DATABASE_FOLDER).child(childUid)
    if(childEventDataListener == null) {
        childEventDataListener = object : ChildEventListener {
            override fun onChildAdded(snapshot: DataSnapshot, previousChildName: String?) {

                for(snap in snapshot.children) {
                    val newParcel = snapshot.getValue(YourClassConverter::class.java)!!
                }
            }

            override fun onChildChanged(snapshot: DataSnapshot, previousChildName: String?) { }
            override fun onChildRemoved(snapshot: DataSnapshot) { }
            override fun onChildMoved(snapshot: DataSnapshot, previousChildName: String?) {}
            override fun onCancelled(error: DatabaseError) {}
        }
        refDB.addChildEventListener(childEventDataListener!!)
    }
}

类 YourClassConverter 应遵循该规则,如下所示的 getValue 标头注释中所述。我更喜欢使用这个转换器,因为当其中一些未在 firebase 中定义时,我可以控制传递的默认值。

此方法用于将此快照中包含的数据编组到您选择的类中。类必须符合 2 个简单的约束: 类必须有一个不带参数的默认构造函数 类必须为要分配的属性定义公共 getter。反序列化实例时,没有公共 getter 的属性将设置为其默认值 示例类可能如下所示:

  class Message {
     private String author;
     private String text;

     private Message() {}

     public Message(String author, String text) {
         this.author = author;
         this.text = text;
     }

     public String getAuthor() {
         return author;
     }

     public String getText() {
         return text;
     }
 }

 // Later
 Message m = snapshot.getValue(Message.class);

原文由 Marcelo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题