我正在尝试将Firebase数据库中收到的消息显示给所需的用户。
user1发送的文本会在其设备上正确显示,即使该消息到达了Firebase数据库,也不会在user2设备上显示。这是主要问题。
我正在使用以下代码检查新邮件:
private void checkMessage(){
final DatabaseReference rRef = FirebaseDatabase.getInstance().getReference();
final DatabaseReference uRef = rRef.child("users");
final DatabaseReference mRef = uRef.child(toUid);
final DatabaseReference kRef = mRef.child("rec_msg");
kRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
if(mAuth.getCurrentUser().getUid().equals(toUid)) {
Map map = (Map) dataSnapshot.getValue();
assert map != null;
String message = map.get("rec_msg").toString();
addMessageBox(message, 2);
}
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
if(mAuth.getCurrentUser().getUid().equals(toUid)) {
Map map = (Map) dataSnapshot.getValue();
assert map != null;
String message = map.get("rec_msg").toString();
addMessageBox(message, 2);
}
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.i("Error", databaseError.getDetails());
}
});
打印框并在屏幕上显示文本的代码如下:
private void addMessageBox(String message, int type){
TextView tv = new TextView(Main5Activity.this);
tv.setText(message);
tv.setPadding(20, 30, 30, 20);
tv.setTextSize(1, (float) 20.1);
LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
lp2.weight = 1.0f;
if (type == 1) {
lp2.gravity = Gravity.END;
tv.setBackgroundResource(R.drawable.rounded_rectangle_grey);
} else {
lp2.gravity = Gravity.START;
tv.setBackgroundResource(R.drawable.rounded_rectangle_violet);
}
tv.setLayoutParams(lp2);
layout.addView(tv);
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
发送按钮代码如下:
send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String meText = message.getText().toString();
if (!meText.equals("")) {
addMessageBox(meText, 1);
storeToUID(toUid, fromUid);
sendMessage(message.getText().toString(), toUid);
checkMessage();
}
message.setText("");
}
});
数据库看起来像这样:
“ sendMessage()”和“ storeToUID()”仅将值存储在Firebase数据库中。
此外,如果未在“发送”按钮的侦听器代码中添加“ checkMessage()”,则会使应用程序崩溃。
我应该在哪里以及如何放置checkMessage()代码以使应用程序正常运行?