1

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();

    }
}

0 Answers0