У меня есть такая структура Firebase для потомка 'Messages':
И последний дочерний элемент имеет значение 'latesImage', равное 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;
}