Проблема с фильтрацией сообщений для конкретного пользователя в приложении Android studio

# #java #android #firebase #firebase-realtime-database

Вопрос:

Я создаю приложение для продажи, и когда вы нажимаете на элемент, вы можете отправить свои адреса в базу данных relatime. У меня нет проблем с отображением всех адресов в представлении переработчика, проблема в том, что когда я пытаюсь отфильтровать адреса для определенных пользователей, я получаю пустой экран, на котором вообще нет данных. Я получаю текущего пользователя и сравниваю его с получателем этого сообщения. Переменная MessageRel представляет относительный макет, в котором отображаются сообщения с адресами. Я пытаюсь отфильтровать данные в onBindViewHolder следующим образом:

 @Override public void onBindViewHolder(@NonNull MessageViewHolder holder, int position) {  Message m = mMessages.get(position);  holder.showMessage.setText(m.getAdress());  FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();   if(mMessages.get(position).getReciver().equals(user.toString())){  holder.messageRel.setVisibility(View.VISIBLE);  }else {  holder.messageRel.setVisibility(View.GONE);  } }  

И вот как выглядит моя база данных введите описание изображения здесь

Я действительно не знаю, что я делаю не так?

 public class MessageAdapter extends RecyclerView.Adapterlt;MessageAdapter.MessageViewHoldergt; {   private Listlt;Messagegt; mMessages; private Context mContext; MessageAdapter messageAdapter;   FirebaseUser fUser;  public MessageAdapter(Listlt;Messagegt; mMessages, Context mContext) {  this.mMessages = mMessages;  this.mContext = mContext; }  @NonNull @Override public MessageAdapter.MessageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {  View view = LayoutInflater.from(mContext).inflate(R.layout.chat_item_right, parent, false);  return new MessageAdapter.MessageViewHolder(view); }  @Override public void onBindViewHolder(@NonNull MessageViewHolder holder, int position) {  Message m = mMessages.get(position);  holder.showMessage.setText(m.getAdress());  FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();    if(mMessages.get(position).getReciver().equals(user.toString())){  holder.messageRel.setVisibility(View.VISIBLE);  }else {  holder.messageRel.setVisibility(View.GONE);  }  }  @Override public int getItemCount() {  return mMessages.size(); }   public class MessageViewHolder extends RecyclerView.ViewHolder {   public TextView showMessage;  public RelativeLayout messageRel;   public MessageViewHolder(@NonNull View itemView) {  super(itemView);   showMessage = itemView.findViewById(R.id.showMessage);  messageRel = itemView.findViewById(R.id.messageRel);  } }  /*@Override public int getItemViewType(int position) {  fUser = FirebaseAuth.getInstance().getCurrentUser();  if(mMessages.get(position).getReciver().equals(fUser.getUid())){  return CORRECT_RECIVER;  }else {  return INCORRECT_RECIVER;  } }*/  

}

Комментарии:

1. Информации недостаточно, чтобы мы могли помочь. Что mMessages.get(position).getReciver() возвращается? В чем заключается ценность user.toString() ?

2. mMessages.get(позиция).getReciver() возвращает значение reciver в базе данных реального времени, а user.toString должен возвращать то же значение, что и для текущего пользователя, вошедшего в систему. Я могу опубликовать весь адаптер, если это поможет

Ответ №1:

Значения, которые вы храните в свойствах author и reciver [sic], являются хэш-кодом соответствующего User объекта в одном конкретном клиенте Android. Другой клиент, скорее всего, даст пользователю другое значение, поэтому это не лучший способ идентификации пользователей.

Вместо того, чтобы использовать user.toString() для хранения и фильтрации пользователей, идиоматический подход состоит в том, чтобы использовать для этого их UID. Так что храните user.getUID() и также фильтруйте это.