I have a mobile app where users can talk to each other. I am using firebase real time database in my application. In the application, I keep and show the total number of people the users are talking to. My method is to send the uid of that user to the "Contact" table when each user presses the send message button in the chat. This method is very costly. Because every time I press the send message button, it sends data to firebase. Is there a better method?
ContactRef = FirebaseDatabase.getInstance().getReference().child("Contact");
private void SendMessage() {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
final String messageText = messageınputtext.getText().toString();
if (TextUtils.isEmpty(messageText)){
}
else {
String messagesenderref ="message/" + messageSenderID + "/" + messageReceiverID;
String messagereceiverref ="message/" + messageReceiverID + "/" + messageSenderID;
DatabaseReference usermessagekeyref = Rootref.child("message")
.child(messageSenderID).child(messageReceiverID).push();
String messagepushid = usermessagekeyref.getKey();
Map messageTextBody = new HashMap();
messageTextBody.put("message" , messageText);
messageTextBody.put("time" , saveCurrentTime);
messageTextBody.put("date" , saveCurrentDate);
messageTextBody.put("type" , "text");
messageTextBody.put("from" , messageSenderID);
Map messageBodyDetails = new HashMap();
messageBodyDetails.put(messagesenderref + "/" + messagepushid , messageTextBody);
messageBodyDetails.put(messagereceiverref + "/" + messagepushid , messageTextBody);
Rootref.updateChildren(messageBodyDetails).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()){
}
else {
String message = task.getException().getMessage();
Toast.makeText(context, "Error :" + message , Toast.LENGTH_SHORT).show();
}
}
});
Map messageTextBody3 = new HashMap();
messageTextBody3.put("Contact", "1");
ContactRef.child(messageSenderID).child(messageReceiverID).updateChildren(messageTextBody3).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()){
}
}
});
ContactRef.child(messageReceiverID).child(messageSenderID).updateChildren(messageTextBody3).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()){
}
}
});
Contact list count:
ContactRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
countusercontact = (int) dataSnapshot.getChildrenCount();
contactcount.setText(Integer.toString(countusercontact ));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
Db: