Android 如何在应用程序不崩溃的情况下从firebase数据库中删除项目

Android 如何在应用程序不崩溃的情况下从firebase数据库中删除项目,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,因此,我编写了这段代码,从数据库中读取一个项目,并将信息写入各种文本视图。 我现在要做的是,一旦写入文本视图,就从数据库中删除作为“结果”引用的项。 请注意所有这些代码都按预期工作,但是一旦文本视图中填充了数据,并且该项目从数据库中删除,应用程序就会停止(崩溃) 我已经对发生这种情况的原因进行了广泛的研究,并在其他线程上建议我添加如果(datasnapshot.exsists()){//my code}那么它将阻止我的应用程序崩溃,但这并没有起作用 我的错误消息是: E/AndroidR

因此,我编写了这段代码,从数据库中读取一个项目,并将信息写入各种文本视图。 我现在要做的是,一旦写入文本视图,就从数据库中删除作为“结果”引用的项。
请注意所有这些代码都按预期工作,但是一旦文本视图中填充了数据,并且该项目从数据库中删除,应用程序就会停止(崩溃)

我已经对发生这种情况的原因进行了广泛的研究,并在其他线程上建议我添加如果(datasnapshot.exsists()){//my code}那么它将阻止我的应用程序崩溃,但这并没有起作用

我的错误消息是:

    E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.fujdevelopers.bottled, PID: 7274
              java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
                  at com.fujdevelopers.bottled.readMsg$1.onDataChange(readMsg.java:52)
                  at com.google.android.gms.internal.zzbpx.zza(Unknown Source)
                  at com.google.android.gms.internal.zzbqx.zzZS(Unknown Source)
                  at com.google.android.gms.internal.zzbra$1.run(Unknown Source)
                  at android.os.Handler.handleCallback(Handler.java:746)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:148)
                  at android.app.ActivityThread.main(ActivityThread.java:5443)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
如果我拿出那条线:

     myRef.child(result).removeValue();
然后所有的工作都不会崩溃,但如果我把它留在里面,所有的工作都会崩溃

如果有人能帮我,我将非常感激

编辑:我知道空指针是什么,我理解为什么会发生空指针,但我不明白为什么在这种情况下会有空指针。(我是firebase数据库的新手)

我的代码中显示的数据库引用是

DatabaseReference newRef = FirebaseDatabase.getInstance().getReference("messages").child(result);
然而,删除使用了参考“myRef”,即

DatabaseReference myRef = FirebaseDatabase.getInstance().getReference("messages");
我不明白为什么在执行完所有代码后,我得到了空指针,我的程序崩溃了


编辑我修复了它,添加了一个删除事件侦听器

我想提出建议,但不知道是否有帮助

根据您给定的错误。似乎您试图从被删除的项目中获取数据,但不知何故它得到了
NullPointerException


请尝试将侦听器添加到
FirebaseDatabase.getInstance().getReference(“消息”)
而不是
FirebaseDatabase.getInstance().getReference(“消息”).child(结果)
然后通过
dataSnapshot
循环到键等于
result
的项目,然后检查并执行删除操作。

我想给出建议,但不知道是否有用

根据您给定的错误。似乎您试图从被删除的项目中获取数据,但不知何故它得到了
NullPointerException


请尝试将侦听器添加到
FirebaseDatabase.getInstance().getReference(“消息”)
而不是
FirebaseDatabase.getInstance().getReference(“消息”).child(结果)
然后通过
dataSnapshot
循环到键等于
result
的项,然后检查并执行删除操作。

如果您查看代码newRef引用子项,则应详细说明重复的重复。但是它从myRef中删除了引用“message”的内容,所以我当前的代码按照您的要求执行,很抱歉在我的帖子中不清楚。我没有在您的
onDataChange
中看到任何循环。但你似乎设法解决了你的问题。恭喜!如果你看newRef引用孩子的代码,我会详细说明。但是它从myRef中删除了引用“message”的内容,所以我当前的代码按照您的要求执行,很抱歉在我的帖子中不清楚。我没有在您的
onDataChange
中看到任何循环。但你似乎设法解决了你的问题。恭喜!
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference("messages");