如何从模型类中检索全部子代并在android中传递适配器?

时间:2019-07-06 19:24:15

标签: java android firebase-realtime-database

我从firebase实时数据库中检索了数据,并将其传递给适配器并在recyclerview中显示。 下图显示了我的数据结构。 database structure

lastname,postid和timestamp由模型类成功检索。 但我想检索总数。 “评论”的子项并传递适配器。 这是我的模型课。

public class Post
{
    public String lastname;
    public String postid;
    public long timestamp;

    public Postt()
    {

    }

    public Postt(String lastname, long timestamp, String postid)
    {
        this.lastname=lastname;
        this.timestamp=timestamp;
        this.postid=postid;
    }

    public String getPostid() {
        return postid;
    }

    public void setPostid(String postid) {
        this.postid = postid;
    }

    public long getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(long timestamp) {
        this.timestamp = timestamp;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
}

适配器是

List<Post> mPost;
@Override
public void onBindViewHolder(@NonNull final PostHolder postHolder, final int i) {
        String posid=mPost.get(i).getPostid();
        String lastname=mPost.get(i).getLastname();
        long timestamp=mPost.get(i).getTimestamp();
***//Here i want to get the total no of child of "comments" node.//
//please dont tell to use ValueEventListner inside onBindViewHolder//***
            }

这是我在MainActivity中的查询

query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                List<Post> userModels = new ArrayList<>();
                for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
                       userModels.add(userSnapshot.getValue(Post.class));
//Here I want to retrieve no of "comments"child and pass in adapter//
                }
                mAdapter.addAll(userModels);
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });

用于检索“注释”的总数。的孩子,我该如何准备模型类和for循环查询?

1 个答案:

答案 0 :(得分:1)

由于您正在使用Firebase数据库 我相信您正在使用datasnapshot来获取特定帖子的评论,如数据库结构中所示。 添加侦听器后获取数据快照时,您会发现 dataSnapshot 将具有用于子项Count的方法,您可以这样调用它:

dataSnapshot.getChildrenCount()

在获取评论的节点中使用它,然后在将列表发送到适配器后将其发送。

参考:DataSnapshot_Docs

已编辑:

您现在实际上正在获得整个Post节点,并且您只缺少注释部分,您需要在Post Class中添加带有变量名称注释的List以及它的设置方法和获取方法。就像这里,但是将注释更改为注释字符串对象的类型,无论您将注释作为数据类型如何

public class Post
{
public String lastname;
public String postid;
public long timestamp;
public HashMap<String, YourCommentClassName> comments;

在您的onBindViewHolder中将是这样

List<Post> mPost;
     @Override
     public void onBindViewHolder(@NonNull final PostHolder postHolder, final int i) {
    String posid=mPost.get(i).getPostid();
    String lastname=mPost.get(i).getLastname();
    long timestamp=mPost.get(i).getTimestamp();
    // This will have the list of comments and the number of the comments 
    //you have
    long commentsNumber = 0
    if(mPost.get(i).getComments()!=null)
      commentsNumber=mPost.get(i).getComments().size();
        }