首页 > 解决方案 > 数据快照返回空值

问题描述

我正在使用两个事件侦听器,一个在另一个内部。首先是检查用户是否在数据库中,其次是显示数据库中的用户数。

Query queries=database.child("songs").orderByChild("user").equalTo(userauth.getEmail());

ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if(!dataSnapshot.exists()) {
            //create new user

            database.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists()) {
                        numOfUsers = dataSnapshot.child("users").getValue(int.class);
                        userinfo.setText(String.valueOf(numOfUsers));
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                }
            });
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
queries.addValueEventListener(eventListener);

但我不断收到此错误:


java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
    at com.example.passiveincome.RegistrationActivity$1$1.onDataChange(RegistrationActivity.java:76)
    at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
    at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
    at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

这是我的数据库的图片:数据库。

我显然有一个包含整数的“用户”字段。那我哪里错了?

标签: androidfirebase-realtime-database

解决方案


问题在这里:

Query queries=database.child("songs").orderByChild("user").equalTo(userauth.getEmail());

songs数据库的根没有节点,所以database.child("songs")不匹配任何节点。

也没有子属性user。我假设您正在寻找users(复数),但数据库无法知道这一点。

您的查询需要是:

database = FirebaseDatabase.getInstance().getReference();
Query queries=database.orderByChild("users").equalTo(0);

推荐阅读