Android 如何从 firebase 数据库中删除值?

2023-11-26

这是我在 firebase 中的第一个项目。我试图从 firebase 中删除值,但是当我尝试从 firebase 中删除值时,我的应用程序崩溃了。我不明白如何解决这个错误

服务等级

public class NotiListener extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    //When the service is started
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        //Opening sharedpreferences
        SharedPreferences sharedPreferences = getSharedPreferences(Constant.SHARED_PREF, MODE_PRIVATE);

        //Getting the firebase id from sharedpreferences
        String id = sharedPreferences.getString(Constant.UNIQUE_ID, null);

        //Creating a firebase object
        Firebase firebase = new Firebase(Constant.FIREBASE_APP + id);

        //Adding a valueevent listener to firebase
        //this will help us to  track the value changes on firebase
        firebase.addValueEventListener(new ValueEventListener() {

            //This method is called whenever we change the value in firebase
            @Override
            public void onDataChange(DataSnapshot snapshot) {
                  if(snapshot.child("msg") != null){
                String msg = snapshot.child("msg").getValue().toString();


                if (msg.equals("none"))
                    return;


                showNotification(msg);
            } else{
                Log.e("Value-->","Null");
            }

            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {
                Log.e("The read failed: ", firebaseError.getMessage());
            }
        });

        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        Toast.makeText(this, "MyService Stopped", Toast.LENGTH_LONG).show();
    }

    private void showNotification(String msg){
        //Creating a notification
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.mipmap.ic_launcher);
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com"));
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
        builder.setContentIntent(pendingIntent);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
        builder.setContentTitle("Firebase Push Notification");
        builder.setContentText(msg);
        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        notificationManager.notify(1, builder.build());
    }
}

删除值的代码是:

Firebase firebase=new Firebase(Constant.FIREBASE_APP+id);
                    firebase.orderByChild(id).equalTo(id).addListenerForSingleValueEvent(
                            new ValueEventListener() {
                                @Override
                                public void onDataChange(DataSnapshot dataSnapshot) {
                                     dataSnapshot.getRef().removeValue();

                                }

                                @Override
                                public void onCancelled(FirebaseError firebaseError) {

                                }
                             });

Log:

10-21 17:46:17.384 30986-30986/com.example.pitech09.bizfriend E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                Process: com.example.pitech09.bizfriend, PID: 30986
                                                                                java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
                                                                                    at com.example.pitech09.bizfriend.NotiListener$1.onDataChange(NotiListener.java:52)
                                                                                    at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:56)
                                                                                    at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45)
                                                                                    at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38)
                                                                                    at android.os.Handler.handleCallback(Handler.java:739)
                                                                                    at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                    at android.os.Looper.loop(Looper.java:135)
                                                                                    at android.app.ActivityThread.main(ActivityThread.java:5343)
                                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                                    at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)

dataSnapshot.getRef().setValue(null);不是删除 Firebase 对象的正确方法。不允许您将空值保存到数据库中。要删除它,您可以使用:

dataSnapshot.getRef().removeValue();

您还应该检查该值是否不为空,因为您将删除该对象。

if(snapshot.child("msg").getValue() != null){
   String msg = snapshot.child("msg").getValue().toString();
   return;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 如何从 firebase 数据库中删除值? 的相关文章

随机推荐

  • 对 WinMain@16(代码块)的未定义引用

    当我编译 secrypt cpp 程序时 我的编译器显示错误 undefined reference to WinMain 16 我的代码如下 加密 h ifndef SECRYPT H define SECRYPT H void jReg
  • Java GUI显示网页并返回HTML

    我需要如下的工作流程 load xyz com in the browser window the browser is live meaning users can interact with it browser load http w
  • 在带有泛型参数的泛型方法中使用 Spring RestTemplate

    要将泛型类型与 Spring RestTemplate 一起使用 我们需要使用ParameterizedTypeReference 无法获取通用 ResponseEntity 其中 T 是通用类 SomeClass 假设我有一些课 publ
  • 为什么 git 将某些 cpp 文件视为二进制文件?

    这是输出git log 5a831fdb34f05edd62321d1193a96b8f96486d69 HEAD HEAD origin work work LIB xxx cpp Bin 592994 gt 593572 bytes L
  • 让 Jenkins 通过 Mercurial 提交构建项目

    有没有办法在单个存储库中指定挂钩 现在我们已经在 etc mercurial hgrc 文件中指定了钩子 但每次它都会构建两次 并且它会为每个存储库中的每次提交构建 所以我们想为每个存储库指定一个构建 这就是我们实现钩子的方式 hooks
  • 在 Android 密钥库中安全存储密钥

    我正在制作一个与服务器通信的 Android 应用程序 我在服务器上使用基于令牌的身份验证 并将信息从服务器传递到客户端 我使用非对称加密 整个过程是这样的 生成的公钥和私钥事先已经存在 公钥用于加密信息 然后从服务器传递到客户端 App使
  • Android——有没有办法将吐司旋转90度?

    想不出更多的信息可以提供 有办法吗 As hackbod也就是说 您必须有一个自定义视图来显示 toast 我为您找到了一些可以为您旋转标签的类 VerticalLabelView and CustomTextView 我选择使用后者 并让
  • 如何预取不常用的代码?

    我想将一些代码预取到指令缓存中 代码路径很少使用 但我需要它位于指令缓存中 或者至少在 L2 中 在极少数情况下 我对这些罕见的情况有一些提前通知 mm prefetch 对代码有用吗 有没有办法将这些不常用的代码放入缓存中 对于这个问题
  • bool 变量可以存储超过 0x01 的值吗?

    include
  • 如何在安装项目的应用程序数据中安装文件(C#)

    我想将数据库安装到单独的文件夹 C Users User1 AppData Roaming Company1 database mdb 我正在使用 C 安装项目 我该怎么做 右键单击该项目并选择 查看 gt 文件系统 在新的文件系统屏幕中
  • 在 JSP 中自动装配 Spring Beans 最简洁的方法是什么?

    我们目前正在向旧的 Web 应用程序添加一些新功能 该应用程序仅使用 JSP 没有任何前端框架 我们最近添加了 Spring 并且希望在修改后的 JSP 中自动装配 Bean 同时不重写所有内容以使用 SpringMVC Struts2 或
  • 如何在 Angular2 中使用/包含 Fabricjs

    我想在我的项目中使用fabricjs 我使用 Bower 安装了 Fabricjs 并链接到了 index html 中 但它不起作用 请看下面的代码 索引 html
  • 在哪里调用base.WndProc()或base.DefWndProc()?

    我有一些关于重写 Windows 窗体 NativeWindow 的 WndProc 方法的问题 WndProc 和 DefWndProc 之间到底有什么区别 编辑 我之前以为它被称为 DefaultWndProc 我只能重写 WndPro
  • 如何将一个数近似到小数点后n位?

    我已经开始使用maxima就在几周前 实际上我刚刚使用过几次 wxMaximaOS X 的界面 我试图在网上找到这个问题的解决方案 但也许是因为我瞎了 或者可能是因为我在maxima官方文档中搜索的经验不多 所以我还没有找到具体的解决方案
  • Jenkins Git 管道中未设置环境变量

    我正在尝试读取 Jenkins 管道脚本中的一些环境变量 这些变量应该由 Git 插件设置 但似乎它们没有设置 因为当我尝试在脚本中使用时 它的值是空字符串 而且如果我使用 sh printenv 我可以看到它们没有设置 可能我错过了一些东
  • heightForRowAtIndexPath 用于更长的 NSString

    我有一个UITableView 分组 并且需要计算两种样式单元格的高度 UITableViewCellStyleDefault and UITableViewCellStyleValue2 我就是这样做的UITableViewCellSty
  • 如何使环境变量作为python sdk中的环境变量到达Dataflow工作人员

    我用 python sdk 编写自定义接收器 我尝试将数据存储到AWS S3 要连接 S3 需要一些凭据 密钥 但出于安全原因 最好在代码中设置 我想让环境变量作为环境变量到达数据流工作人员 我该怎么做 一般来说 为了向您不想硬编码的工作人
  • 在Python中计算日期是开始、未来还是现在

    我有两个日期 时间字符串 start date 10 2 2010 8 00 00 end date 10 2 2010 8 59 00 我需要编写一个函数来计算该事件是在未来 过去还是现在正在发生 我已经阅读了相当多的文档 但发现很难让它
  • javascript readAsArrayBuffer 返回空数组缓冲区

    我正在尝试使用 FileReader readAsArrayBuffer 属性读取本地文件 读取成功 在 onload 回调中 我在 reader result 中看到数组缓冲区对象 但数组缓冲区只是空的 设置了长度 但未设置数据 我如何获
  • Android 如何从 firebase 数据库中删除值?

    这是我在 firebase 中的第一个项目 我试图从 firebase 中删除值 但是当我尝试从 firebase 中删除值时 我的应用程序崩溃了 我不明白如何解决这个错误 服务等级 public class NotiListener ex