Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在这个Android项目中我会遇到NullPointer异常_Android_Firebase_Firebase Realtime Database_Nullpointerexception - Fatal编程技术网

为什么在这个Android项目中我会遇到NullPointer异常

为什么在这个Android项目中我会遇到NullPointer异常,android,firebase,firebase-realtime-database,nullpointerexception,Android,Firebase,Firebase Realtime Database,Nullpointerexception,我是FireBase数据库的初学者。我编写这段代码是为了在身份验证后检索用户数据。身份验证部分工作正常,但数据检索部分由于此错误导致我的应用程序崩溃 java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String java.lang.Object.toString()” 在com.kcw.firebasebasics.UserInterface$1.onDataChange(UserInterface.java:58) 位于com.g

我是FireBase数据库的初学者。我编写这段代码是为了在身份验证后检索用户数据。身份验证部分工作正常,但数据检索部分由于此错误导致我的应用程序崩溃

java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String java.lang.Object.toString()”

在com.kcw.firebasebasics.UserInterface$1.onDataChange(UserInterface.java:58)
位于com.google.firebase.database.core.ValueEventRegistration.firevent(com.google.firebase:firebase数据库@@17.0.0:75)
位于com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase数据库@@17.0.0:63)
在com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase数据库@@17.0.0:55)
位于android.os.Handler.handleCallback(Handler.java:739)
位于android.os.Handler.dispatchMessage(Handler.java:95)

这是我写的代码,我在第58行(导致错误的那行)写了一条注释来识别它

FirebaseUser firebaseUser;
DatabaseReference reference;
TextView greeting;
String name,text;

protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user_interface);
    firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
    reference = FirebaseDatabase.getInstance().getReference() 
                                .child(firebaseUser.getUid());
    greeting = findViewById(R.id.greet_msg);

    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                String text = dataSnapshot.getValue().toString();//line 58

            try {
                JSONObject object = new JSONObject(text);
                name = object.getString("username");
            } catch (JSONException e) {
                e.printStackTrace();
            }
            String message = "WELCOME ";
            message = message + name.toUpperCase();
            greeting.setText(message);
        }

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

        }
    });
帮我解决这个问题

我验证了我的数据库中是否有空对象,但没有找到任何空对象

我还尝试将所有字符串变量设置为全局变量,但也没有成功

最后是我注册用户后的数据库图片


根据API文档,如果查询的位置没有数据,则返回null。在调用getValue()之前,您应该检查数据是否实际存在,或者至少在调用toString()之前手动检查null。

如果数据库
引用中有错误的路径,它应该位于
用户
节点下:

reference = FirebaseDatabase.getInstance().getReference() 
    .child("users").child(firebaseUser.getUid());
greeting = findViewById(R.id.greet_msg);

reference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        if(dataSnapshot.exist()) {
          String text = dataSnapshot.getValue().toString();//line 58

          try {
            JSONObject object = new JSONObject(text);
            name = object.getString("username");
          } catch (JSONException e) {
            e.printStackTrace();
          }
          String message = "WELCOME ";
          message = message + name.toUpperCase();
          greeting.setText(message);
        }
    }

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

    }
}); 

你好。在
数据库引用
对象上调用
.child(“用户”)
之前,您不需要调用
.child(“用户”)
吗?是的,我刚刚实现并修复了它。谢谢你