Reputation: 53
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
Reputation: 502
check carefully this part
dataSnapshot.child("ChatId").getValue().toString()
Are you sure you are receiving something here:
dataSnapshot.child("ChatId")
Upvotes: 0