java.lang.NullPointerException:尝试从字段';java.lang.String com.example.g.Model.PersonalShopper.ps#u name';关于空对象引用

java.lang.NullPointerException:尝试从字段';java.lang.String com.example.g.Model.PersonalShopper.ps#u name';关于空对象引用,java,android,firebase,Java,Android,Firebase,我不太确定什么时候出错了,但我已经检查了变量名是否相同,无论它是否在布局xml和java类中,但当我运行应用程序时,它会给我错误,即 java.lang.NullPointerException:尝试读取空对象引用上的字段“java.lang.String com.example.g.Model.Ps.Ps_name” 我已经声明了变量btw firebaseAuth = FirebaseAuth.getInstance(); currentUser = firebaseAut

我不太确定什么时候出错了,但我已经检查了变量名是否相同,无论它是否在布局xml和java类中,但当我运行应用程序时,它会给我错误,即

java.lang.NullPointerException:尝试读取空对象引用上的字段“java.lang.String com.example.g.Model.Ps.Ps_name”

我已经声明了变量btw

 firebaseAuth = FirebaseAuth.getInstance();
        currentUser = firebaseAuth.getCurrentUser();
        psID = currentUser.getUid();
        databaseReference = FirebaseDatabase.getInstance().getReference("PersonalShopper").child(firebaseAuth.getUid());

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

                PersonalShopper ps = dataSnapshot.getValue(PersonalShopper.class);
                psname.setText(ps.ps_name);
                pspassword.setText(ps.ps_password);
                psemail.setText(ps.ps_email);

            }




我的理解是
dataSnapshot
为空。您应该通过在调试器中暂停代码并在此行放置断点来确保此变量不为null

也许您可以为我们提供更大范围的代码,这样我们就可以看到
dataSnapshot
的来源


我的理解是
dataSnapshot
为空。您应该通过在调试器中暂停代码并在此行放置断点来确保此变量不为null

也许您可以为我们提供更大范围的代码,这样我们就可以看到
dataSnapshot
的来源


ps
为空:

PersonalShopper ps = dataSnapshot.getValue(PersonalShopper.class);

这意味着您查询的数据库位置没有数据。检查您的查询和数据库内容,确保所有内容都正确。

ps
为空:

PersonalShopper ps = dataSnapshot.getValue(PersonalShopper.class);

这意味着您查询的数据库位置没有数据。检查您的查询和数据库内容,确保所有内容都正确。

ps为空:因此检查子项是否有值。您还可以检查下面的方法,它将停止应用程序崩溃,如果子值不为null,它将显示数据

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

              if (dataSnapshot.exists()){



                PersonalShopper ps = dataSnapshot.getValue(PersonalShopper.class);
                psname.setText(ps.ps_name);
                pspassword.setText(ps.ps_password);
                psemail.setText(ps.ps_email);

            }

             }

ps为null:因此检查子项是否有值。您还可以检查下面的方法,它将停止应用程序崩溃,如果子值不为null,它将显示数据

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

              if (dataSnapshot.exists()){



                PersonalShopper ps = dataSnapshot.getValue(PersonalShopper.class);
                psname.setText(ps.ps_name);
                pspassword.setText(ps.ps_password);
                psemail.setText(ps.ps_email);

            }

             }

您已经声明了变量,是的,但这并不意味着它不是null。我不知道你到底做错了什么,但我相信这会返回null:
dataSnapshot.getValue(PersonalShopper.class)
是启动调试器的时候了。尝试读取时错误为null指针,这意味着它无法读取
editText
psname
的文本。几天前刚刚注意到您与NPE有类似的问题。我建议您学习如何处理这些问题,因为它们通常很容易解决。你能做的最好的事情就是学会调试和设置断点。这将允许您在程序运行时查看变量值,甚至在调试器暂停时执行代码。这是调试应用程序的一个很好的介绍:您已经声明了变量,是的,但这并不意味着它不是null。我不知道你到底做错了什么,但我相信这会返回null:
dataSnapshot.getValue(PersonalShopper.class)
是启动调试器的时候了。尝试读取时错误为null指针,这意味着它无法读取
editText
psname
的文本。几天前刚刚注意到您与NPE有类似的问题。我建议您学习如何处理这些问题,因为它们通常很容易解决。你能做的最好的事情就是学会调试和设置断点。这将允许您在程序运行时查看变量值,甚至在调试器暂停时执行代码。这是调试应用程序的一个很好的介绍: