Java 在我的类上找不到()的setter/字段
我试图为我的应用程序创建一个登录屏幕,但当我输入正确的Id和密码时,我的应用程序一直停止。此外,当我调试代码时,错误消息如下:Java 在我的类上找不到()的setter/字段,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我试图为我的应用程序创建一个登录屏幕,但当我输入正确的Id和密码时,我的应用程序一直停止。此外,当我调试代码时,错误消息如下: W/ClassMapper: No setter/field for User found on class com.example.(Projectname).User No setter/field for BookReport found on class com.example.(Projectname).User E/AndroidRuntime: F
W/ClassMapper: No setter/field for User found on class com.example.(Projectname).User
No setter/field for BookReport found on class com.example.(Projectname).User
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.(Projectname), PID: 3339
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at com.example.(Projectname).LoginScreen$1$1.onDataChange(LoginScreen.java:79)
出来了。为什么会发生这种情况?似乎
com.example.hellobook.User
类没有为其字段定义setter。尝试为所有字段定义一个setter,以便语句foundUser=dataSnapshot.getValue(User.class)代码>可以创建正确的用户
对象
e、 g
似乎com.example.hellobook.User
类没有为其字段定义setter。尝试为所有字段定义一个setter,以便语句foundUser=dataSnapshot.getValue(User.class)代码>可以创建正确的用户
对象
e、 g
先生,您的错误是这一行if(userId.equals(id))
因为您在for循环之外的foundUser对象中设置了dataSnapShot的值
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
foundUser = dataSnapshot.getValue(User.class);
userId = foundUser.getId();
userPw = foundUser.getPw();
if (userId.equals(id)) {
if (userPw.equals(psw)) {
startActivity(new Intent(LoginScreen.this, LandingScreen.class));
}
}
else {
Toast.makeText(LoginScreen.this, "Wrong ID or password. Try again", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onCancelled (DatabaseError error) {
@NonNull DatabaseError databaseError; }
});
};
先生,您的错误是这一行if(userId.equals(id))
因为您在for循环之外的foundUser对象中设置了dataSnapShot的值
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
foundUser = dataSnapshot.getValue(User.class);
userId = foundUser.getId();
userPw = foundUser.getPw();
if (userId.equals(id)) {
if (userPw.equals(psw)) {
startActivity(new Intent(LoginScreen.this, LandingScreen.class));
}
}
else {
Toast.makeText(LoginScreen.this, "Wrong ID or password. Try again", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onCancelled (DatabaseError error) {
@NonNull DatabaseError databaseError; }
});
};
您能为您的User
类显示代码吗?显然userId
或userPw
为空,以第79行为准。错误消息的哪一部分让您感到困惑?也许如果您添加空检查,例如,如果(userId!=null&&userId.equals(id))
,代码不会失败。@ChrisStillwell的副本我在原始版本中添加了它post@Andreas是的,我想这就是问题所在,谢谢!!您能为您的User
类显示代码吗?显然userId
或userPw
为空,以第79行为准。错误消息的哪一部分让您感到困惑?也许如果您添加空检查,例如,如果(userId!=null&&userId.equals(id))
,代码不会失败。@ChrisStillwell的副本我在原始版本中添加了它post@Andreas是的,我想这就是问题所在,谢谢!!好吧,除非OP发布了用户
类,否则什么都不能说。好吧,什么都不能说,除非OP发布了用户
类。你的答案听起来很合理,我试过了,但我仍然无法解决问题:((它是否显示相同的错误。您是检查用户id的日志值还是调试它。在if检查之前是否为空?您的答案听起来很合理,我尝试了,但仍然无法解决问题:((它是否显示相同的错误。您是检查用户id的日志值还是调试它。在if检查之前是否为空