简体   繁体   中英

Firebase Firestore gives null pointer exception for a key which exists

I am making a chat app and want to implement a feature to get the online-offline and typing statuses for that in my adapter. I am trying to get the value from the database to display.

This is what I tried

FirebaseFirestore database = FirebaseFirestore.getInstance();
Log.d("conversationId",chatMessage.conversationId + "");
database.collection(Constants.KEY_COLLECTION_USERS)
                .document(chatMessage.conversationId + "")
                .addSnapshotListener((value, error) -> {
                    if (value.getString(Constants.KEY_AVAILABILITY).equals("0")){
                        binding.onlineIndicator.setVisibility(View.GONE);
                        binding.textRecentConversation.setText(chatMessage.message);
                    }else if (value.getString(Constants.KEY_AVAILABILITY).equals("1")){
                        binding.onlineIndicator.setVisibility(View.VISIBLE);
                        binding.textRecentConversation.setText(chatMessage.message);
                    }else if (value.getString(Constants.KEY_AVAILABILITY).equals("2")){
                        makeTypingText(binding, chatMessage.conversationName);
                        binding.onlineIndicator.setVisibility(View.VISIBLE);
                    }
                });

And this is the error I got

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.chatverse.free, PID: 14452
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
    at com.chatverse.free.Adapters.RecentConversationsAdapter$ConversationViewHolder.lambda$setData$0$com-chatverse-free-Adapters-RecentConversationsAdapter$ConversationViewHolder(RecentConversationsAdapter.java:144)
    at com.chatverse.free.Adapters.RecentConversationsAdapter$ConversationViewHolder$$ExternalSyntheticLambda3.onEvent(Unknown Source:6)
    at com.google.firebase.firestore.DocumentReference.lambda$addSnapshotListenerInternal$2$com-google-firebase-firestore-DocumentReference(DocumentReference.java:504)
    at com.google.firebase.firestore.DocumentReference$$ExternalSyntheticLambda2.onEvent(Unknown Source:6)
    at com.google.firebase.firestore.core.AsyncEventListener.lambda$onEvent$0$com-google-firebase-firestore-core-AsyncEventListener(AsyncEventListener.java:42)
    at com.google.firebase.firestore.core.AsyncEventListener$$ExternalSyntheticLambda0.run(Unknown Source:6)
    at android.os.Handler.handleCallback(Handler.java:938)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:223)
    at android.app.ActivityThread.main(ActivityThread.java:7656)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

This is how I verified

First, in the logs, I check the value I printed for the receiver id. It's correct.

I also verified the keys, and everything is correct. I am not sure why such an error is occurring. 此图像显示了我已验证的内容。

I got it.

I was using a static String, giving n error, but it worked when I tried using hard-coded values. Note that this gave me an emulator error but worked fine with an actual device! To make it work on an emulator, I had to try/catch for NullPointerExeption.

Thanks to @AlexMamo

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM