【问题标题】:How do I retrieve data from firebase database and show in custom listview?如何从 firebase 数据库中检索数据并在自定义列表视图中显示?
【发布时间】:2017-12-15 17:31:30
【问题描述】:

我已将用户帖子详细信息存储在 Firebase 数据库中 USERID 下的 Post 节点中,相应地以 Post1、Post2 等增量顺序存储。现在我想按 Post2、Post1 的降序一个一个地检索 Post 节点中的所有数据并显示在自定义列表视图中。对于检索单个帖子节点数据,它工作正常,但不适用于检索多个/所有帖子节点。 这是我的 firebase 数据库图片:

为了显示我尝试过的所有帖子:

dataref1.addValueEventListener(new 
com.google.firebase.database.ValueEventListener() {
        @Override
        public void onDataChange(com.google.firebase.database.DataSnapshot 
dataSnapshot) {

            list.clear();
            for(com.google.firebase.database.DataSnapshot dataSnap : 
dataSnapshot.getChildren())
            {

                for(com.google.firebase.database.DataSnapshot datas : 
dataSnap.getChildren()) {

                    DataModel datamodel = 
dataSnap.getValue(DataModel.class);
                    list.add(datamodel);
                }
            }

            CustomAdapter adapter = new CustomAdapter(Home.this,list);
            listView.setAdapter(adapter);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

它只是在自定义列表视图中显示用户名。

我查看了很多教程,但没有找到解决方案。请帮帮我。

谢谢你:)

【问题讨论】:

  • dataref1 指向哪个位置?
  • @VirendraSingh 它是我们的数据库参考。 dataref1 = FirebaseDatabase.getInstance().getReference("Users");

标签: android firebase firebase-realtime-database firebase-storage


【解决方案1】:

要显示这些帖子,您需要稍微更改一下 Firebase 数据库。目前,您的所有帖子都嵌套在uid 下。您需要添加另一个名为posts 的节点,它是uid 的直接子节点,您需要在其中单独添加所有这些帖子。您的数据库应如下所示:

Firebase-root
     |
     ---- city: "City Name"
     |
     ---- email: "name@email.com"
     |
     ---- //and so on
     |
     ---- posts
           |
           ---- post1
           |
           ---- post2
           |
           ---- post3
           |
           //and so on

要查看这些帖子,请使用以下代码:

//get the uid
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
if (firebaseUser != null) {
    String uid = firebaseUser.getUid();
}

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference postsRef = rootRef.child(uid).child("posts");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String description = ds.child("description").getValue(String.class);
            String dateTime = ds.child("dateTime").getValue(String.class);
            String posturi = ds.child("posturi").getValue(String.class);
            String severity = ds.child("severity").getValue(String.class);
            Log.d("TAG", description + " / " + dateTime + " / " + posturi + " / " + severity);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
yourRef.addListenerForSingleValueEvent(eventListener);

【讨论】:

    【解决方案2】:

    FirebaseUI 库让它变得非常简单。允许您使用 FirebaseRecyclerAdapter 填充 RecyclerView

    这里是官方指南

    FirebaseUI

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多