Запрос данных для FirebaseRecyclerAdapter по значению childs childs - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть такая структура Firebase для потомка 'Messages':

I have a Firebase structure like this for 'Messages' child

И последний дочерний элемент имеет значение 'latesImage', равное true:

And the last child has 'latesImage' value of true

Я пытаюсь создать действие, в котором все контакты пользователя отображаются внутри RecyclerView. Таким образом, в разделе «Сообщения» есть узел, помеченный идентификатором пользователя. Под этим есть все контакты этого конкретного пользователя. В каждом контакте есть все сообщения между этими двумя пользователями. Можно ли создать запрос для FirebaseRecyclerAdapter для извлечения последнего узла из каждого отдельного контакта. С этого узла он должен получить сообщение, имя пользователя и изображение профиля.

Таким образом, схема для одного контакта выглядит следующим образом.

У меня есть весь необходимый код для работы FirebaseRecyclerAdapter, но я не знаю, как запрашивать данные, которые мне нужны. Есть идеи, как мне добиться этого результата?

Вот мой код Java для активности:

private RecyclerView contactsRV;

private DatabaseReference messagesRef;
private FirebaseAuth firebaseAuth;
private String currentUserId;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_messages);

    contactsRV = (RecyclerView)findViewById(R.id.contactsRV);
    contactsRV.setHasFixedSize(true);
    contactsRV.setLayoutManager(new LinearLayoutManager(this));

    firebaseAuth = FirebaseAuth.getInstance();
    currentUserId = firebaseAuth.getCurrentUser().getUid().toString();
    messagesRef = FirebaseDatabase.getInstance().getReference().child("Messages");

    Query searchContacts = messagesRef.child(currentUserId).orderByChild("latestMessage").equalTo(true); //<--- This is the part I'm struggling with

    FirebaseRecyclerAdapter<Contacts, FindContactsViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Contacts, FindContactsViewHolder>
            (Contacts.class, R.layout.message_contacts_layout, FindContactsViewHolder.class, searchContacts)
    {
        @Override
        protected void populateViewHolder(FindContactsViewHolder viewHolder, Contacts model, int position)
        {
            viewHolder.setReceiversProfileImage(model.getReceiversProfileImage());
            viewHolder.setLatestMessage(model.getLatestMessage());
            viewHolder.setReceiversUsername(model.getReceiversUsername());
        }
    };
    contactsRV.setAdapter(firebaseRecyclerAdapter);
}


//GO BACK TO POST FEED
public void goBack(View v)
{
    toMainActivity();
}


//SEND USER TO MAIN ACTIVITY
private void toMainActivity()
{
    Intent mainIntent = new Intent(getApplicationContext(), MainActivity.class);
    startActivity(mainIntent);
}


public static class FindContactsViewHolder extends RecyclerView.ViewHolder
{
    View mView;

    public FindContactsViewHolder(View itemView)
    {
        super(itemView);
        this.mView = itemView;
    }

    public void setReceiversProfileImage(String receiversProfileImage)
    {
        CircleImageView contactProfPic = (CircleImageView)mView.findViewById(R.id.messageContactLayoutProfPic);
        Picasso.get().load(receiversProfileImage).into(contactProfPic);
    }

    public void setLatestMessage(String latestMessage)
    {
        TextView lastMessage = (TextView)mView.findViewById(R.id.messageContactLayoutLastMsg);
        lastMessage.setText(latestMessage);
    }

    public void setReceiversUsername(String receiversUsername)
    {
        TextView contactUsername = (TextView)mView.findViewById(R.id.messageContactLayoutUsername);
        contactUsername.setText(receiversUsername);
    }
}

А вот Java-класс «Контакты»

public String receiversProfileImage, receiversUsername, latestMessage;

public Contacts(){

}

public Contacts(String receiversProfileImage, String receiversUsername, String latestMessage) {
    this.receiversProfileImage = receiversProfileImage;
    this.receiversUsername = receiversUsername;
    this.latestMessage = latestMessage;
}

public String getReceiversProfileImage() {
    return receiversProfileImage;
}

public void setReceiversProfileImage(String receiversProfileImage) {
    this.receiversProfileImage = receiversProfileImage;
}

public String getReceiversUsername() {
    return receiversUsername;
}

public void setReceiversUsername(String receiversUsername) {
    this.receiversUsername = receiversUsername;
}

public String getLatestMessage() {
    return latestMessage;
}

public void setLatestMessage(String latestMessage) {
    this.latestMessage = latestMessage;
}
...