Wie löse ich das Problem eines NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference ?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Wie löse ich das Problem eines NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference ?

    Hallo Community,

    ich bin neu hier und hoffe auf Hilfe, da ich relativ ein Anfänger in Android Studio bin aber ich versuche durch Tutorials etc. zu lernen. :)

    Ich bin jedoch auf ein Problem gestoßen und komme einfach nicht weiter, Stackoverflow oder sonst wo, selbst das Video dreimal angeschaut um zu schauen, wo mein Problem liegt. Komierscherweise hat er das Problem nicht. Ich verstehe nicht warum und zwar ist es ein:

    "com.example.networkusercommunication, PID: 20662 java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference at com.example.networkusercommunication.ChatActivity$5.onDataChange(ChatActivity.java:248)" - Hier Zeile 50 bei getReceiver(). Bei getSender() ist aber alles in Ordnung, ich verstehe das nicht.

    In seinem nächsten ( bzw. meinem jetzigen ) Video zeigte er, wie man eine Nachricht im Chat löscht, dabei zeigte er zwei Methoden. 1. Einfaches Löschen und 2. Die Nachrichten durch:" Diese Nachricht wurde gelöscht " ersetzen. Zum Test probierte ich beides, wie im Tutorial gezeigt. Mir gefällt die zweite Variante besser, deshalb löschte ich die Zeile für Variante 1. Doch dann fing das Problem an. Zuvor funktioniert alles wunderbar, gestern keine Problem aber jetzt geht es nicht mehr. Ich öffne die App und bis zum "Users" Fenster, wo sich alle registrierten Benutzer auffinden, funktioniert alles, wenn ich auf einen Benutzer klicke/drücke, um das Chatfenster zu öffnen, stürzt die ab einfach ab mit dem obigen Error im Logcat. Wie kann ich das Lösen?

    [Musste den Code kürzen, sonst hat es nicht gepasst, hoffe, dass hier das Wichtige vorhanden ist]

    Java-Quellcode: ChatActivity

    1. /
    2. // check edit text change listener
    3. messageEt.addTextChangedListener(new TextWatcher() {
    4. @Override
    5. public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    6. }
    7. @Override
    8. public void onTextChanged(CharSequence s, int start, int before, int count) {
    9. if (s.toString().trim().length() == 0 ) {
    10. checkTypingStatus("noOne");
    11. } else {
    12. checkTypingStatus(hisUid); // uid of receiver
    13. }
    14. }
    15. @Override
    16. public void afterTextChanged(Editable s) {
    17. }
    18. });
    19. readMessages();
    20. seenMessage();
    21. }
    22. private void seenMessage() {
    23. userRefForSeen = FirebaseDatabase.getInstance().getReference("Chats");
    24. seenListener = userRefForSeen.addValueEventListener(new ValueEventListener() {
    25. @Override
    26. public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    27. for (DataSnapshot ds : dataSnapshot.getChildren()) {
    28. ModelChat chat = ds.getValue(ModelChat.class);
    29. if ( chat.getReceiver().equals(myUid) && chat.getSender().equals(hisUid)) {
    30. HashMap<String, Object> hasSeenHashMap = new HashMap<>();
    31. hasSeenHashMap.put("isSeen", true);
    32. ds.getRef().updateChildren(hasSeenHashMap);
    33. }
    34. }
    35. }
    36. @Override
    37. public void onCancelled(@NonNull DatabaseError databaseError) {
    38. }
    39. });
    40. }
    41. private void readMessages() {
    42. chatList = new ArrayList<>();
    43. DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference("Chats");
    44. dbRef.addValueEventListener(new ValueEventListener() {
    45. @Override
    46. public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    47. chatList.clear();
    48. for (DataSnapshot ds : dataSnapshot.getChildren()) {
    49. ModelChat chat = ds.getValue(ModelChat.class);
    50. if (chat.getReceiver().equals(myUid) ||
    51. (chat.getReceiver().equals(hisUid) && chat.getSender().equals(myUid))) {
    52. chatList.add(chat);
    53. }
    54. // adapter
    55. adapterChat = new AdapterChat(ChatActivity.this, chatList, hisImage);
    56. adapterChat.notifyDataSetChanged();
    57. // set adapter to recyclerview
    58. recyclerView.setAdapter(adapterChat);
    59. }
    60. }
    61. @Override
    62. public void onCancelled(@NonNull DatabaseError databaseError) {
    63. }
    64. });
    65. }
    66. private void sendMessage(String message) {
    67. /* "Chats" node will be created, that will contain all chats. Whenever user
    68. * sends message it will create a new child in "Chats" node and that child
    69. * will contain the following key values.
    70. * sender: UID of sender
    71. * receiver: UID of receiver
    72. * message: the actual message
    73. */
    74. DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
    75. String timestamp = String.valueOf(System.currentTimeMillis());
    76. HashMap<String, Object> hashMap = new HashMap<>();
    77. hashMap.put("sender", myUid);
    78. hashMap.put("receiver", hisUid);
    79. hashMap.put("message", message);
    80. hashMap.put("timestamp", timestamp);
    81. hashMap.put("isSeen", false);
    82. databaseReference.child("Chats").push().setValue(hashMap);
    83. // reset edittext after sending message
    84. messageEt.setText("");
    85. }
    86. private void checkUserStatus() {
    87. // get current user
    88. FirebaseUser user = firebaseAuth.getCurrentUser();
    89. if (user != null) {
    90. // user is signed in stay here
    91. //set email of logged in user
    92. //mProfileTv.setText(user.getEmail());
    93. myUid = user.getUid(); // currently signed in user's uid
    94. } else {
    95. // user not signed in, go to main activity
    96. startActivity(new Intent(this, MainActivity.class));
    97. finish();
    98. }
    99. }
    100. private void checkOnlineStatus(String status) {
    101. DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference("Users").child(myUid);
    102. HashMap<String, Object> hashMap = new HashMap<>();
    103. hashMap.put("onlineStatus", status);
    104. // update value of onlineStatus of current user
    105. dbRef.updateChildren(hashMap);
    106. }
    107. private void checkTypingStatus(String typing) {
    108. DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference("Users").child(myUid);
    109. HashMap<String, Object> hashMap = new HashMap<>();
    110. hashMap.put("typingTo", typing);
    111. // update value of onlineStatus of current user
    112. dbRef.updateChildren(hashMap);
    113. }
    114. }
    115. return super.onOptionsItemSelected(item);
    116. }
    117. }
    Alles anzeigen

    Quellcode

    1. public class ModelChat {
    2. String message, receiver, sender, timestamp;
    3. boolean isSeen;
    4. public ModelChat() {
    5. }
    6. public ModelChat(String message, String receiver, String sender, String timestamp, boolean isSeen) {
    7. this.message = message;
    8. this.receiver = receiver;
    9. this.sender = sender;
    10. this.timestamp = timestamp;
    11. this.isSeen = isSeen;
    12. }
    13. public String getMessage() {
    14. return message;
    15. }
    16. public void setMessage(String message) {
    17. this.message = message;
    18. }
    19. public String getReceiver() {
    20. return receiver;
    21. }
    22. public void setReceiver(String receiver) {
    23. this.receiver = receiver;
    24. }
    25. public String getSender() {
    26. return sender;
    27. }
    28. public void setSender(String sender) {
    29. this.sender = sender;
    30. }
    31. public String getTimestamp() {
    32. return timestamp;
    33. }
    34. public void setTimestamp(String timestamp) {
    35. this.timestamp = timestamp;
    36. }
    37. public boolean isSeen() {
    38. return isSeen;
    39. }
    40. public void setSeen(boolean seen) {
    41. isSeen = seen;
    42. }
    43. }
    Alles anzeigen
  • Hallo


    Quellcode

    1. if (chat.getReceiver().equals(myUid) ||
    2. (chat.getReceiver().equals(hisUid) && chat.getSender().equals(myUid))) {
    3. chatList.add(chat);
    4. }


    Wasist „myUid“ und „HisUid“ ?

    Wenn das .equals laufen soll, müssen das Strings sein kann ich in deinem Code nicht sehn.



    Auch dürfen die Objekte nicht null sein denn dann kommt dein Fehler

    method 'boolean java.lang.String.equals(java.lang.Object)'



    Prüfe ob deine User Objekte nicht lehr (null) sind, ich denke dem ist so.

    Füge doch mal ein Log ein um zu prüfen ob du einen User String bekommen hast.
    Wenn nicht ist es klar das das equals fehl schlägt.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()