My Application is a chat based application.
At first i am in the MainActivity, A chat list is visible in the MainActivity.
In my chat application app, Whenever I get a new message its shows a count of how many messages are not seen yet. Once we open the ChatActivity to view the messages then it is updated as viewed in Firebase Database. And after closing or Coming back to MainActivity(i also tried to
@Override
public void onBackPressed()
{
super.onBackPressed();
ChatActivity.this.finish();
}
), But, firebase Database EventListener is always in the listening mode not stopped.
So, When i get new message into the chat, its Automatically updated that message were viewed even without opening the ChatActivity.
I want a solution in 2 ways: Either i want to close the DatabaseListening mode to be stopped (or) the Activity should be completely destroy.
Here is my Code:- ChatActivity.java
package com.example.myapp;
public class ChatActivity extends AppCompatActivity {
private String messageReceiverID,messageSenderID;
private DatabaseReference rootRef;
private MessageAdapter messageAdapter;
private final List<Messages> messagesList=new ArrayList<>();
private RecyclerView userMessagesList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
initializeContoller();
rootRef.child("Messages").child(messageSenderID).child(messageReceiverID).addChildEventListener(new ChildEventListener()
{
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s)
{
Messages messages=dataSnapshot.getValue(Messages.class); // getter & setter
if (messages.getReceiver().equals("0")) // here 0(zero) means not viewed and 1 means viewed
{
Toast.makeText(ChatActivity.this, "Changed successfully", Toast.LENGTH_SHORT).show(); // this toast is everytime executed at MainActivity.java even new message added in database
rootRef.child("Messages").child(messageSenderID).child(messageReceiverID).child(messages.getMessageID()).child("receiver").setValue("1");
}
messagesList.add(messages);
messageAdapter.notifyDataSetChanged();
userMessagesList.smoothScrollToPosition(userMessagesList.getAdapter().getItemCount());
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void initializeContoller() {
messageSenderID=mAuth.getCurrentUser().getUid();
rootRef= FirebaseDatabase.getInstance().getReference();
receiverUserID = getIntent().getExtras().get("visit_user_id").toString();
messageReceiverID=getIntent().getExtras().get("visit_user_id").toString();
senderUserID = mAuth.getCurrentUser().getUid();
messageAdapter=new MessageAdapter(messagesList);
userMessagesList=(RecyclerView)findViewById(R.id.private_messages_list_of_users);
}
@Override
protected void onPause() {
super.onPause();
Toast.makeText(this, "onPause", Toast.LENGTH_SHORT).show();
this.finish();
return;
}
@Override
protected void onStop() {
super.onStop();
Toast.makeText(this, "onStop", Toast.LENGTH_SHORT).show();
this.finish();
return;
}
@Override
public void onBackPressed() {
super.onBackPressed();
Toast.makeText(this, "onBackPressed", Toast.LENGTH_SHORT).show();
ChatActivity.this.finish();
}
}