无法从datasnapshot对象的Firebase检索数据

时间:2018-09-01 16:01:41

标签: android firebase

enter image description here

这是我的数据,我想使用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);)

2 个答案:

答案 0 :(得分:1)

假设您的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);

答案 1 :(得分:0)

 use this method
//-----------------// data inside kids----------

        private void getDataFrom() {

            String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();

            DatabaseReference mCustomerDatabase = FirebaseDatabase.getInstance().getReference().child("users").child("kids");

            mCustomerDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists() && dataSnapshot.getChildrenCount() > 0) {
                        Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
                        if (map.get("kid1ID") != null) {
                            customer_name = map.get("title").toString();
                            Log.i("kid1ID",String.valueOf(kid1ID));

                        }

                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                }
            });
        }