我已经正确地进行了聊天,并且它正在向fire-base数据库发送数据,但现在问题是检索消息,代码运行正常,但仍然无法弄清楚为什么没有显示聊天
试图添加获取消息功能但仍然看不到任何更改
我的获取消息功能
//retrieve messages
private void FetchMessages() {
rootReference.child("Messages")
.child(messageSenderID)
.child(messageReceiverID)
.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot.exists()){
Messages messages = dataSnapshot.getValue(Messages.class);
messageList.add(messages);
messageAdapter.notifyDataSetChanged(); //whenever new message is added it will be displayed
}
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
我如何初始化字段
//initialize the above variables
private void InitializeFields() {
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//connect chat custom bar to chat activity
ActionBar actionBar = getSupportActionBar();
Objects.requireNonNull(actionBar).setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowCustomEnabled(true);
LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View action_bar_view = layoutInflater.inflate(R.layout.chat_custom_toolbar, null);
actionBar.setCustomView(action_bar_view);
receiverName = findViewById(R.id.custom_profile_name);
receiverProfileImage = findViewById(R.id.custom_profile_image);
sendMessageButton = findViewById(R.id.send_message_button);
userMessageInput = findViewById(R.id.input_message);
messageAdapter = new MessagesAdapter(messageList);
userMessagesList = findViewById(R.id.messages_list_of_users);
linearLayoutManager = new LinearLayoutManager(this);
userMessagesList.setHasFixedSize(true);
userMessagesList.setLayoutManager(linearLayoutManager);
userMessagesList.setAdapter(messageAdapter);
}
我的On方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
mAuth = FirebaseAuth.getInstance();
messageSenderID = mAuth.getCurrentUser().getUid();
rootReference = FirebaseDatabase.getInstance().getReference();
//receive user id and name from other parents profile
messageReceiverID = getIntent().getExtras().get("visit_user_id").toString();
//messageReceiverName = getIntent().getExtras().get("userName").toString();
InitializeFields();
DisplayReceiverInformation();
sendMessageButton.setOnClickListener(v -> SendMessage());
FetchMessages();
}
我认为您没有返回正确的邮件列表大小。请确保在getItemCount()
方法中你返回someList.size()
除了0
。
我也正在开发聊天应用程序,我正在以这种方式提取按摩: -
private void readMessage(final String myId, final String userId) {
ArrayList<Chat> mChat = new ArrayList<>();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference(chatTableName);
try {
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
mChat.clear();
Chat chat = null;
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
chat = snapshot.getValue(Chat.class);
assert chat != null;
if (chat.getReceiver().equals(myId) && chat.getSender().equals(userId) ||
chat.getReceiver().equals(userId) && chat.getSender().equals(myId)) {
mChat.add(chat);
}
adapter = new MessageAdapter(UserMessageActivity.this, mChat);
recyclerView.setAdapter(adapter);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
} catch (Exception e) {
Toast.makeText(this, "" + e.getMessage(), Toast.LENGTH_SHORT).show();
}
}