【问题标题】:Firebase Firestore gives null pinter exception for a key which existsFirebase Firestore 为存在的键提供空指针异常
【发布时间】:2021-11-09 17:05:57
【问题描述】:

我正在制作一个聊天应用程序,我想实现一个功能来获得在线离线并在我的适配器中输入状态我试图从数据库中获取值以显示。

这是我试过的

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);
                    }
                });

这是我遇到的错误

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)

这是我验证的方式

首先在日志中检查我为接收者 ID 打印的值。它是正确的。

我还验证了密钥,一切都正确。我不确定为什么会发生这样的错误。

希望我能尽快得到答复。谢谢????。

【问题讨论】:

  • 您的参考资料中Constants.KEY_COLLECTION_USERSchatMessage.conversationId + "" 的实际值是多少?您是否尝试过使用硬编码值?是这样的吗?
  • “没有工作”没有提供足够的信息,所以我们可以提供帮助。究竟是什么不起作用?
  • 抱歉,我在使用硬编码值时写错了键。我使用了正确的键,它起作用了。谢谢

标签: java android firebase google-cloud-firestore


【解决方案1】:

我明白了。

我使用的是静态字符串,它给出了 n 错误,但是当我尝试使用硬编码值时,它起作用了。请注意,这在模拟器中给了我错误,但在真实设备上运行良好!让它工作一个模拟器,我必须使用 try/carch 进行 NullPointerExeption。

感谢@AlexMamo

【讨论】:

    猜你喜欢
    • 2016-09-30
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多