I'm working on a chat app where user can see last message of conversation. But I am stuck with this situation where i am unable to get last message.
I have tried this query like
DatabaseReference getLastMessageRef =
FirebaseDatabase.getInstance().getReference("FriendsMessages");
Query query1 = getLastMessageRef.child(common.currentUser.getPhone()).child(id).orderByKey().limitToLast(1);
Where common.currentUser.getPhone
is number/id of current user and id is id of other person.
And database structure is like DATABASE STRUCTURE PICTURE
private void getAllMessages() {
Query query = FirebaseDatabase.getInstance().getReference("FriendsMessages").child(common.currentUser.getPhone());
FirebaseRecyclerOptions<MessageModel> options = new FirebaseRecyclerOptions.Builder<MessageModel>()
.setQuery(query,MessageModel.class)
.build();
adapter = new FirebaseRecyclerAdapter<MessageModel, ShowAllMessageViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull final ShowAllMessageViewHolder holder, int position, @NonNull final MessageModel model) {
String id = adapter.getRef(position).getKey();
DatabaseReference getFriendDataRef = FirebaseDatabase.getInstance().getReference("User");
DatabaseReference getLastMessageRef = FirebaseDatabase.getInstance().getReference("FriendsMessages");
getFriendDataRef.child(id).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
String dp = dataSnapshot.child("img").getValue().toString();
String name = dataSnapshot.child("name").getValue().toString();
holder.MessageName.setText(name);
Picasso.with(getBaseContext()).load(dp).into(holder.messageDp);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Query query1 = getLastMessageRef.child(common.currentUser.getPhone()).child(id).orderByKey().limitToLast(1);
query1.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String mesaage = (String) dataSnapshot.child("message").getValue();
Toast.makeText(mContext, ""+mesaage, Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@NonNull
@Override
public ShowAllMessageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_message_view,parent,false);
return new ShowAllMessageViewHolder(view);
}
};
showAllMessages.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
I am getting null string.