简体   繁体   English

Firebase Firestore 为存在的键提供空指针异常

[英]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.首先,在日志中,我检查了我为接收者 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.我使用的是静态字符串,给出了 n 错误,但是当我尝试使用硬编码值时它起作用了。 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.为了让它在模拟器上工作,我不得不尝试/捕捉 NullPointerExeption。

Thanks to @AlexMamo感谢@AlexMamo

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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