java.lang.NullPointerException:尝试调用虚拟方法';java.lang.String com.example.app.users.getEmail()';关于空对象引用
几个小时前,我在firebase数据库中添加了更多表。之后,应用程序在读取值时崩溃 从Firebase获取的值很好,但应用程序在此崩溃 请在下面找到数据库的日志和屏幕截图java.lang.NullPointerException:尝试调用虚拟方法';java.lang.String com.example.app.users.getEmail()';关于空对象引用,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,几个小时前,我在firebase数据库中添加了更多表。之后,应用程序在读取值时崩溃 从Firebase获取的值很好,但应用程序在此崩溃 请在下面找到数据库的日志和屏幕截图 2020-01-21 20:44:44.652 1499-1499/com.example.app D/AndroidRuntime: Shutting down VM 2020-01-21 20:44:44.654 1499-1499/com.example.app E/AndroidRuntime: FATAL EXCEP
2020-01-21 20:44:44.652 1499-1499/com.example.app D/AndroidRuntime: Shutting down VM
2020-01-21 20:44:44.654 1499-1499/com.example.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.app, PID: 1499
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.app.users.getEmail()' on a null object reference
at com.example.app.AndroidDashboardDesignActivity.showData(AndroidDashboardDesignActivity.java:232)
at com.example.app.AndroidDashboardDesignActivity.access$000(AndroidDashboardDesignActivity.java:41)
at com.example.app.AndroidDashboardDesignActivity$1.onDataChange(AndroidDashboardDesignActivity.java:135)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.2.0:75)
at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.2.0:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.2.0:55)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:224)
at android.app.ActivityThread.main(ActivityThread.java:7055)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:536)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:876)
2020-01-21 20:44:44.686 1499-1499/com.sdgi.sdcmt I/Process: Sending signal. PID: 1499 SIG: 9
请检查firebase数据库的屏幕截图
代码在
com.sdgi.sdcmt.AndroidDashboardDesignActivity.showData(AndroidDashboardDesignActivity.java:232)
// uinfo.setFullname(ds.child(userID).getValue(users.class).getFullname());//set Name
uinfo.setEmail(ds.child(userID).getValue(users.class).getEmail());//set Email
// uinfo.setEmail(ds.child(userID).getValue(users.class).getEmail());//set Email
//
(AndroidDashboardDesignActivity.java:41)
public class AndroidDashboardDesignActivity extends Activity implements UpdateHelper.OnUpdateCheckListener {
private static final String TAG = "AndroidDashboardActivity";
(AndroidDashboardDesignActivity.java:135)
myref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
showData(dataSnapshot);
}
我补充说
Log.d(TAG, "datashot: " + ds.toString());
在我的代码中。显示数据正在正确获取-
2020-01-21 20:44:44.650 1499-1499/com.example.app D/androidDashboard活动:datashot:DataSnapshot{key=3yxbv4pe42gvmwur0xxxxxxxxxxx,value={zipcode=123456,country=mycountry,newuser=no,password=12345678,address=myaddress,gender=Male,city=mycity,mobile=1234567890,rollno=1234567890,fullname=ahjsj,email=mail2@mail.com} }
问题在于代码,请在错误行提供代码。正如错误所述,com.example.app.users
为空。我建议对类使用标准命名,这是一个带有大写字母的类,因此应该是com.example.app.Users
,但似乎更可能是指单个用户,而不是多个用户。是的,但命名没有做错任何事情,在firebase中添加表之前,它工作正常,但是我将尝试重命名该类,感谢您的快速响应ds.child(userID)。getValue(users.class)
返回null,这意味着在您查询的数据库中的位置没有数据。请使用IDE的调试工具(断点)调试相关行(232)的实际值。我猜您正在将一个nullusers
对象传递给getValue()
,该对象反过来返回一个nullusers
引用,并且您正在对null引用调用一个方法(getEmail()
)。