首页 > 解决方案 > 无法从 datasnapshot 对象的 firebase 检索数据

问题描述

在此处输入图像描述

这是我的数据,我想通过使用 addValueEventListener 来检索它,但不幸的是我的应用程序停止了

 @Override
    public void onStart() {
        super.onStart();

        db.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                List.clear();

               for(DataSnapshot dSnapshot :dataSnapshot.getChildren()){
                   List<String> td = (ArrayList<String>) dataSnapshot.getValue();
                 // data data1=dSnapshot.getValue(data.class);
                   List.add(data1);

               }

              DataList adapter =new DataList(Fragment1.this.getActivity(),List);
               list.setAdapter(adapter);
            }


            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });


    }

由于这行代码,我的应用程序已停止,所以请告诉我任何替代方案。

//**data data1=dSnapshot.getValue(data.class);

 List.add(data1);)

标签: androidfirebase

解决方案


假设您的db变量指出了正确的参考。

而不是使用ValueEventListener和循环遍历每个孩子。使用ChildEventListener并确保DatabaseReference指向子节点所在的根目录,这样我们就可以遍历每个 POJO。

db.addChildEventListener(new ChildEventListener() {
public void onChildAdded(DataSnapshot dataSnapshot, String previousKey) {
    list.add(dataSnapshot.getValue(YourModel.class)); // Change with your POJO
    // Add to your list
}
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
public void onCancelled(DatabaseError er) { }});

如果要在实时数据库中检索泛型,请使用 Firebase 的抽象类GenericTypeIndicator

GenericTypeIndicator<List<Message>> t = new GenericTypeIndicator<List<Message>>() {};
 List<Message> messages = snapshot.getValue(t);

推荐阅读