Как получить общий ребенок из класса модели и передать в адаптер в Android? - PullRequest
1 голос
/ 06 июля 2019

Я получил данные из базы данных Firebase в реальном времени, передал их адаптеру и показал их в обзоре утилизатора.Ниже изображение показывает мою структуру данных.database structure

Фамилия, postid и метка времени успешно получены классом модели.Но я хочу получить общее количество нет.потомок "комментариев" и переход в адаптер.Вот мой класс модели.

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) {
            }
        });

Для получения "комментариев" всего нет.ребенка, как мне подготовить класс модели и цикл в запросе?

1 Ответ

1 голос
/ 06 июля 2019

Поскольку вы используете базу данных Firebase Я полагаю, что вы используете datasnapshot для получения комментариев к конкретному сообщению, как показано в вашей структуре базы данных. Когда вы получите datasnapshot после добавления прослушивателя, вы обнаружите, что dataSnapshot будет иметь метод для детей. Количество, которое вы можете назвать так:

dataSnapshot.getChildrenCount()

Используйте его в узле, с которого вы получаете комментарии, и затем вы можете отправить его после получения списка на адаптер.

Ref: DataSnapshot_Docs

Отредактировано:

Теперь вы фактически получаете весь узел Post, и вам не хватает только части комментариев, вам нужно будет добавить List с комментариями к именам переменных вместе с его установщиками и получателями в вашем классе Post. как здесь, но измените Comment на тип комментариев String Object, какой бы у вас ни был комментарий в качестве типа данных

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();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...