java - 当我发送消息时,我可以在 firebase 中看到它,但我无法在模拟器或手机上读取它,它什么也没有显示

标签 java android

我正在制作聊天应用程序...但是当我发送它发送的消息时,我可以在 firebase 上看到它,但在模拟器和手机中我看不到...为什么会发生这种情况?我认为问题可能出在 readMessages()

这是我的聊天 Activity 类

   userQuery.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                String name = "" + ds.child("name").getValue();
                hisImage = "" + ds.child("image").getValue();

                nameTv.setText(name);
                try {
                    Picasso.get().load(hisImage).placeholder(R.drawable.ic_defult_img_face).into(profileTv);
                } catch (Exception e) {
                    Picasso.get().load(R.drawable.ic_defult_img_face).into(profileTv);
                }
            }
        }

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

        }
    });

    sendBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String message = messageEt.getText().toString().trim();
            if (TextUtils.isEmpty(message)) {
                Toast.makeText(ChatActivity.this, "Cannot send empty message...", Toast.LENGTH_SHORT).show();
            } else {
                sendMessage(message);
            }
        }

    });
    readMessages();
    seenMessages();
}

读取和发送功能

  private void readMessages() {
    chatList = new ArrayList<>();
    DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference("Chats");
    dbRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            chatList.clear();
            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                Modelchat chat = ds.getValue(Modelchat.class);
                if (myUid.equals(chat.getReceiver()) && hisUid.equals(chat.getSender()) ||
                        hisUid.equals(chat.getReceiver()) && myUid.equals(chat.getSender())) {
                    chatList.add(chat);
                }
                adapterChat = new AdapterChat(ChatActivity.this, chatList, hisImage);
                adapterChat.notifyDataSetChanged();
                recyclerView.setAdapter(adapterChat);
            }
        }


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

        }
    });
}


private void sendMessage(String message) {


    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();

    String timeStamp = String.valueOf(System.currentTimeMillis());

    HashMap<String, Object> hashMap = new HashMap<>();
    hashMap.put("Sender", myUid);
    hashMap.put("receiver", hisUid);
    hashMap.put("message", message);
    hashMap.put("timeStamp", timeStamp);
    hashMap.put("isSeen", false);

    databaseReference.child("Chats").push().setValue(hashMap);

    messageEt.setText("");
}

有人可以帮助我吗? 如果您想要更多代码或请发表评论,我将提交它。

最佳答案

我会给出一些提示:

将其移至 readMessages() 中:

chatList.clear();

并将其放在下面:

chatList = new ArrayList<>();
//here...

确保您的 Modelchat 如下所示:

class Modelchat{


//the main thing is that these must be written exactly like the keys in your database
private String Sender;
private String receiver;
private String message;
private String timeStamp;
private boolean isSeen;


public Modelchat(String Sender,String receiver,String message,String timeStamp,boolean isSeen){

this.Sender=Sender;
this.receiver=receiver;
this.message=message;
this.timeStamp=timeStamp;
this.isSeen=isSeen;
}


//generate also getters and setters......


}

关于java - 当我发送消息时,我可以在 firebase 中看到它,但我无法在模拟器或手机上读取它,它什么也没有显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61551837/

相关文章:

android - 样式表未加载到移动设备上

android - 未安装 HAX 内核模块

java - 有关Java TV API的指南

java - Apache shiro - 如何使用单独的数据库表支持多种用户类型

Java/Android - 将 GMT 时间字符串转换为本地时间

android - 如何调整 ListBox 项目高度以适应 Firemonkey (android) 中的文本?

android apis < 3.0 上的翻转卡动画不翻转回来

android - 如何从 sd 卡 android 获取所有音频文件

html - 删除 HTML 使用 Java 删除对齐方式

java - foreach 和 for 循环将重复记录复制到数组中