【发布时间】:2021-07-17 23:14:15
【问题描述】:
我正在开发一个聊天应用程序,我怎样才能让最新的聊天内容高于其他人?在图片中,收到的最后一条消息是由 Wejdan 发出的,但正如您所见,它仍然在底部,而不是在其他聊天的顶部。
我保存了每条消息及其 timeStamp 和 isSeen 值,如下所示:
我知道它与时间戳有关,但我不知道如何实现它。这是我发送消息的代码:
private void sendMessage (final String sender, final String receiver, String message){
final String timeStamp = String.valueOf(System.currentTimeMillis());
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("sender", sender);
hashMap.put("receiver", receiver);
hashMap.put("message", message);
hashMap.put("isseen", false);
hashMap.put("time", timeStamp);
reference.child("Chats").push().setValue(hashMap);
final DatabaseReference chatRef = FirebaseDatabase.getInstance().getReference("Chatlist")
.child(fUser.getUid()).child(userid);
chatRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(!snapshot.exists()){
chatRef.child("id").setValue(userid);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
final DatabaseReference chatRef1 = FirebaseDatabase.getInstance().getReference("Chatlist")
.child(receiver).child(fUser.getUid());
chatRef1.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(!dataSnapshot.exists())
{
chatRef1.child("id").setValue(fUser.getUid());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
此代码用于确定哪些消息未读:
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
//fix
if (!isAdded()) return;
ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getChildFragmentManager());
int unread = 0;
for (DataSnapshot snapshot1 : snapshot.getChildren()){
Chat chat = snapshot1.getValue(Chat.class);
if(chat.getReceiver().equals(firebaseUser.getUid()) && !chat.isIsseen()){
unread++;
}
}
if(unread == 0 ){
viewPagerAdapter.addFragment(new ChatsFragment() , "Chats");
}else {
viewPagerAdapter.addFragment(new ChatsFragment() , "("+unread+") Chats");
}
viewPagerAdapter.addFragment(new UsersFragment(), "Users");
viewPager.setAdapter(viewPagerAdapter);
tabLayout.setupWithViewPager(viewPager);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
这是我的ChatFragment 的 sn-p(我有所有的聊天记录):
private List<Chatlist> usersList;
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.hideIfEmpty(recyclerView);
recyclerView.showIfEmpty(mEmptyView);
fuser = FirebaseAuth.getInstance().getCurrentUser();
usersList = new ArrayList<>();
reference = FirebaseDatabase.getInstance().getReference("Chatlist").child(fuser.getUid());
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
usersList.clear();
for(DataSnapshot snapshot1 : snapshot.getChildren()){
Chatlist chatlist = snapshot1.getValue(Chatlist.class);
usersList.add(chatlist);
}
chatList();
}
@Override
public void onCancelled(@NonNull DatabaseError error)
{
}
});
private void chatList() {
mUsers = new ArrayList<>();
reference = FirebaseDatabase.getInstance().getReference("Users");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
mUsers.clear();
for(DataSnapshot snapshot1 : snapshot.getChildren()){
User user = snapshot1.getValue(User.class);
for(Chatlist chatlist : usersList){
if(user.getId().equals(chatlist.getId())){
mUsers.add(user);
}
}
}
usersAdapter = new UsersAdapter(getContext(), mUsers , true);
recyclerView.setAdapter(usersAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
请帮忙。
【问题讨论】:
标签: android