Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的适配器不会更新值,直到我返回并再次返回该活动。什么';原因是什么_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 我的适配器不会更新值,直到我返回并再次返回该活动。什么';原因是什么

Java 我的适配器不会更新值,直到我返回并再次返回该活动。什么';原因是什么,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我希望当用户看到消息时,它应该替换从发送到看到的文本。但这种情况只有在我回到并再次参加聊天活动时才会发生。我唯一的问题是,当两个用户的聊天都打开时,如何将“delivered”更新为“seen”。除此问题外,所有其他工作正常。适配器可能未发出通知。 以下是我看到的消息的聊天活动代码: private void seenMessage(){ messageRef.addListenerForSingleValueEvent(new ValueEventListener() {

我希望当用户看到消息时,它应该替换从发送到看到的文本。但这种情况只有在我回到并再次参加聊天活动时才会发生。我唯一的问题是,当两个用户的聊天都打开时,如何将“delivered”更新为“seen”。除此问题外,所有其他工作正常。适配器可能未发出通知。 以下是我看到的消息的聊天活动代码:

private void seenMessage(){

    messageRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (final DataSnapshot snapshot:dataSnapshot.getChildren()){
                rootRef.child("Messages").child(friendUserId).child(currentUID).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot1) {
                        for (DataSnapshot snapshot1:dataSnapshot1.getChildren()){
                            ChatMessage chatMessage=snapshot1.getValue(ChatMessage.class);
                            if (chatMessage.getFrom().equals(friendUserId)){
                                HashMap seen=new HashMap();
                                seen.put("isseen",true);
                                snapshot.getRef().updateChildren(seen);
                                snapshot1.getRef().updateChildren(seen);
                                chatMessageAdapter.notifyDataSetChanged();
                            }
                        }
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });
            }
            chatMessageAdapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}
这里是我的适配器代码

  if (userMessageList.size()-1==i){
        if (message.isIsseen()){
            chatMessageViewHolder.seenStatus.setText("Seen");
        }
        else {
            chatMessageViewHolder.seenStatus.setText("Delivered");
        }
    }
    else {
        chatMessageViewHolder.seenStatus.setVisibility(View.GONE);
    }

在您的
messageRef
中将
addValueEventListener
替换为
addValueEventListener
,因为第一个侦听器只触发一次以侦听该引用处的值,它只会通知适配器一次,而第二个侦听器会继续侦听该引用处的任何更改,并且您将在不离开活动的情况下实时看到更改,因为每当在该引用处进行更改时,适配器都会收到通知。

我建议您首先检查两件事是否
chatMessageAdapter.notifyDataSetChanged()
是否从主线程被调用,然后在适配器内放置一个
日志
,检查它是否正在接收
notifyDataSetChanged
事件。我这样做了,但它仍在执行相同的操作