我使用两个事件监听器,一个在另一个内部。第一个是检查用户是否在数据库中,第二个是显示数据库中的用户数量。
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)
这是我的数据库的一张图片:
我显然有一个字段“users”,其中包含整数。那我哪里错了?
###问题在于:
Query queries=database.child("songs").orderByChild("user").equalTo(userauth.getEmail());
在数据库的根目录中没有节点歌曲,因此database。child("songs")不匹配任何节点。
也没有儿童财产使用者。我假设您正在寻找用户(复数),但数据库无法知道这一点。
你的查询需要是:
database = FirebaseDatabase.getInstance().getReference();
Query queries=database.orderByChild("users").equalTo(0);