我从firebase实时数据库中检索了数据,并将其传递给适配器并在recyclerview中显示。 下图显示了我的数据结构。
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循环查询?
答案 0 :(得分:1)
由于您正在使用Firebase数据库 我相信您正在使用datasnapshot来获取特定帖子的评论,如数据库结构中所示。 添加侦听器后获取数据快照时,您会发现 dataSnapshot 将具有用于子项Count的方法,您可以这样调用它:
dataSnapshot.getChildrenCount()
在获取评论的节点中使用它,然后在将列表发送到适配器后将其发送。
已编辑:
您现在实际上正在获得整个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();
}