Shady Elkassas
Shady Elkassas

Reputation: 53

My application crashes due to the calling of (activateNotificationsMessages) function

At first i call the getUserMatchId() from my main, it works perfectly on its own but then when i added the activateNotificationsMessages() function it started to crash. I tried commenting out the activateNotifications function and it worked normally, maybe this is because i call a childeventlistener within a childeventlistener but how do i solve this

    private void getUserMatchId() {

    DatabaseReference matchDb = FirebaseDatabase.getInstance().getReference().child("Users").child(currentUserId).child("connections").child("matches");

    ChildEventListener valueEventListener = matchDb.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            if (dataSnapshot.exists()) {

                    FetchMatchInformation(dataSnapshot.getKey());
                    activateNotificationsMessages(dataSnapshot.child("ChatId").getValue().toString());

            }
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}


    private void activateNotificationsMessages(String key) {
    DatabaseReference chatNotificationDb = FirebaseDatabase.getInstance().getReference().child("Chat").child(key).child("Messages");
    ChildEventListener valueEventListener = chatNotificationDb.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        if (dataSnapshot.exists()){
        if(dataSnapshot.child("createdByUser").getValue().toString() != FirebaseAuth.getInstance().getCurrentUser().getUid().toString()) {


        String message = dataSnapshot.child("text").getValue().toString();
        String userName = dataSnapshot.child("userName").getValue().toString();

        NotificationCompat.Builder builder = new NotificationCompat.Builder(getActivity(), CHANNEL_ID)
            .setSmallIcon(R.drawable.signup)
            .setContentTitle(userName)
            .setContentText(message)
            .setPriority(NotificationCompat.PRIORITY_DEFAULT);

        NotificationManager notificationManager = (NotificationManager) getActivity().getSystemService(getActivity().NOTIFICATION_SERVICE);

        notificationManager.notify(0, builder.build());
}
}

LOGCAT : 01-27 22:59:54.984 387-387/com.example.android.friendzr E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.android.friendzr, PID: 387 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference at com.example.android.friendzr.Matches.MatchesActivity$3.onChildAdded(MatchesActivity.java:225) at com.google.android.gms.internal.px.zza(Unknown Source) at com.google.android.gms.internal.vj.zzHX(Unknown Source) at com.google.android.gms.internal.vp.run(Unknown Source) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5832) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

Upvotes: 0

Views: 60

Answers (1)

Azhagthott
Azhagthott

Reputation: 502

check carefully this part

dataSnapshot.child("ChatId").getValue().toString()

Are you sure you are receiving something here:

    dataSnapshot.child("ChatId")

Upvotes: 0

Related Questions