当用户提交图像而不是仅显示一个图像时,将出现两个图像,然后导致重复我写的每条消息。接收用户不会收到重复的东西,但是会发送重复的东西。有点奇怪,因为如果我离开对话并重新输入,消息和重复的图像将不再显示。
这是我认为造成冲突的代码。
@Override
public void onBindViewHolder(@NonNull final MessageViewHolder messageViewHolder, int i)
{
String messageSenderId = mAuth.getCurrentUser().getUid();
Messages messages = userMessagesList.get(i);
String fromUserID = messages.getFrom();
String fromMessageType = messages.getType();
usersRef = FirebaseDatabase.getInstance().getReference().child("Users").child(fromUserID);
usersRef.addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
if (dataSnapshot.hasChild("image"))
{
String receiverImage = dataSnapshot.child("image").getValue().toString();
Picasso.get().load(receiverImage).placeholder(R.drawable.profile_image).into(messageViewHolder.receiverProfileImage);
}
}
@Override
public void onCancelled(DatabaseError databaseError)
{
}
});
messageViewHolder.receiverMessageText.setVisibility(View.GONE);
messageViewHolder.receiverProfileImage.setVisibility(View.GONE);
messageViewHolder.senderMessageText.setVisibility(View.GONE);
messageViewHolder.messageSenderPicture.setVisibility(View.GONE);
messageViewHolder.messageReceiverPicture.setVisibility(View.GONE);
if (fromMessageType.equals("text"))
{
if (fromUserID.equals(messageSenderId))
{
messageViewHolder.senderMessageText.setVisibility(View.VISIBLE);
messageViewHolder.senderMessageText.setBackgroundResource(R.drawable.sender_messages_layout);
messageViewHolder.senderMessageText.setText(messages.getMessage());
}
else
{
messageViewHolder.receiverProfileImage.setVisibility(View.VISIBLE);
messageViewHolder.receiverMessageText.setVisibility(View.VISIBLE);
messageViewHolder.receiverMessageText.setBackgroundResource(R.drawable.receiver_messages_layout);
messageViewHolder.receiverMessageText.setText(messages.getMessage());
}
}
else if (fromMessageType.equals("image"))
{
if (fromUserID.equals(messageSenderId))
{
messageViewHolder.messageSenderPicture.setVisibility(View.VISIBLE);
Picasso.get().load(messages.getMessage()).resize(1000, 1000).centerInside().into(messageViewHolder.messageSenderPicture);
}
else
{
messageViewHolder.receiverProfileImage.setVisibility(View.VISIBLE);
messageViewHolder.messageReceiverPicture.setVisibility(View.VISIBLE);
Picasso.get().load(messages.getMessage()).resize(1000, 1000).centerInside().into(messageViewHolder.messageReceiverPicture);
}
}
}
这是发送重复消息错误时的打印屏幕。
答案 0 :(得分:0)
在从firebase ex接收数据之前清除接收数据列表。 list.clear()