【问题标题】:Firebase data retrieve with random keys使用随机键检索 Firebase 数据
【发布时间】:2018-06-12 22:28:58
【问题描述】:

我的 android 应用程序有一个 firebase 数据结构,我想从 push() 方法生成的随机键中检索数据,该方法是 Forum 节点的子节点,它是数据库根节点的子节点。请建议我一种方法来做到这一点。谢谢。

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    您可以获得父“论坛”节点的所有子节点。只需使用 getChildren() 方法。然后在索引位置随机选择一个子节点。

    DataSnapshot snapshot = dataSnapshot.child("Forums");
    Iterable<DataSnapshot> children = snapshot.getChildren();
    
    for (DataSnapshot child: children) {
            Object obj = child.getValue(Object.class);
    }
    

    【讨论】:

    • 我想从论坛节点的每个子节点中检索名称、问题、标题和 UID,然后将它们存储在回收站或列表视图中,类似于 Instagram 和 Facebook 等社交网站中的时间线等等有什么想法吗?
    • Firebase 有自己的 recyclerview 实现。检查此链接:github.com/firebase/FirebaseUI-Android/blob/master/database/…
    • 你也可以通过使用我提供的代码来做你所说的。您将不得不对此进行一些工作
    【解决方案2】:

    要显示Forums节点下所有子节点的值,请使用以下代码:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference forumsRef = rootRef.child("Forums");
    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                String name = ds.child("name").getValue(String.class);
                String ques = ds.child("ques").getValue(String.class);
                String title = ds.child("title").getValue(String.class);
                String uid = ds.child("uid").getValue(String.class);
                Log.d("TAG", name + " / " + ques + " / " + title + " / " + uid);
            }
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };
    forumsRef.addListenerForSingleValueEvent(valueEventListener);
    

    【讨论】:

      【解决方案3】:

      首先你应该编写你的类模型 "FormusModel" 来存储来自服务器的数据 你可以用这个

        >   > 
      
      rootRef.child("Forums").addChildEventListener(new
          > ChildEventListener() {
          >     >                 @Override
          >     >                 public void onChildAdded(DataSnapshot dataSnapshot, String s) {
          >     >                     ForumsModel model = dataSnapshot.getValue(FormusModel.class);
      //now you can use model.getname();.... 
          >     }
      

      注意:您必须实现另一个方法,例如 onChildCahnge 监听器

      【讨论】:

      • 不知道论坛id,是push()方法创建的,每次都是唯一的,随机生成的key
      猜你喜欢
      • 2018-09-10
      • 1970-01-01
      • 2018-05-01
      • 2018-08-25
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      相关资源
      最近更新 更多