【问题标题】:How to retrieve particular data from firebase?如何从 Firebase 中检索特定数据?
【发布时间】:2023-04-05 09:41:02
【问题描述】:

在检索数据时我正在使用此代码

databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
     for (DataSnapshot data : dataSnapshot.getChildren()) {
       Firebasemodel firebasemodel = data.getValue(Firebasemodel.class);
       firebasemodels.add(firebasemodel);
    }
 }
 @Override
public void onCancelled(DatabaseError databaseError) {

}
});` 

这段代码sn-p返回firebase数据库的完整数据。

但我想检索特定用户的完整数据。如何实现?

提前致谢

【问题讨论】:

    标签: android database firebase firebase-realtime-database real-time


    【解决方案1】:

    请使用此代码获取所有数据:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference notepadRef = rootRef.child("notepad-secure").child("notepad");
    ValueEventListener eventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                String id = ds.child("id").getValue(String.class);
                String note = ds.child("note").getValue(String.class);
                String title = ds.child("title").getValue(String.class);
                String user = ds.child("user").getValue(String.class);
                Log.d("TAG", id + " / " + note + " / " + title + " / " + users);
            }
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };
    notepadRef.addListenerForSingleValueEvent(eventListener);
    

    你的输出将是:

    -Kono2LMSe... / sadsad / sadsad / NK46X......
    

    如果您只想检索特定数据,请使用此代码:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference notepadRef = rootRef.child("notepad-secure").child("notepad").child("NK46...");
    ValueEventListener eventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
        String id = ds.child("id").getValue(String.class);
        String note = ds.child("note").getValue(String.class);
        String title = ds.child("title").getValue(String.class);
        String user = ds.child("user").getValue(String.class);
        Log.d("TAG", id + " / " + note + " / " + title + " / " + users);
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };
    notepadRef.addListenerForSingleValueEvent(eventListener);
    

    它肯定会起作用。

    【讨论】:

    • 编辑了我的答案。我添加了.child("notepad-secure")。 uotput 应该如上所述。有用吗?
    • 不,它不起作用,让我举个例子,假设我有 3 个用户,如 A、B、C。A 做了 3 个笔记,B 做了 2 个笔记,C 做了 10 个笔记。因此,如果 A 已登录,那么我只想检索 A 笔记的数据。
    【解决方案2】:

    试试下面的代码:

    FirebaseDatabase.getInstance().getReference().child("notepad-secure/notepad").addListenerForSingleValueEvent(new ValueEventListener() {
    
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Iterator<DataSnapshot> dataSnapshots = dataSnapshot.getChildren().iterator();
    
            while (dataSnapshots.hasNext()) {
                user = dataSnapshotChild.getValue(User.class);
                users_list.add(user);
            }
        }
    
        @Override
            public void onCancelled(DatabaseError databaseError) {
            Log.d("Error", "---" + databaseError.getMessage());
        }
    });
    

    模型类:

    public class User {
    
        public String id;
        public String note;
        public String tittle;
    
        public User() {
        }
    
        public User(String id, String note, String tittle) {
            this.id= id;
            this.note= note;
            this.tittle= tittle;
        }
    }
    

    并声明

    List<User> users_list;
    User user; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多