为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我总是抛出 NullPointerException?

为什么我总是抛出 NullPointerException?

慕姐4208626 2023-11-01 17:02:36
我正在尝试将活动用户信息加载到新活动中并显示它。我在不同的活动中做过类似的事情,并且效果很好,但由于某种原因,情况并非如此,我不确定。每当 android studio 尝试调用用户的方法时,它都会抛出 NullPointerException。我已经尝试了我能想到的一切,重新格式化其编写方式,嵌套在不同的方法中,以不同的方式将数据传递给它。没有任何效果,我发现的关于该主题的每一篇文章都没有任何帮助@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_user_edit);    int userID = getIntent().getIntExtra("sessionUser", 0);    tuckBoxDao = TuckBoxDB.createTuckBoxDB(this).tbDao();    Email = findViewById(R.id.email);    Username = findViewById(R.id.username);    Password = findViewById(R.id.password);    Mobile = findViewById(R.id.phoneNumber);    Notifications = findViewById(R.id.notificationBox);    Emails = findViewById(R.id.emailBox);    registerButton = findViewById(R.id.registerButton);    registerButton.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            registerUser(user);        }    });    backButton = findViewById(R.id.backButton);    backButton.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            goBack();        }    });    user = LoginActivity.tuckBoxDB.tbDao().searchById(userID);    String username = user.getUsername();    Username.setText(username);    String email = user.getEmail();    Email.setHint(email);    String mobile = user.getMobile();    Mobile.setHint(mobile);    Boolean notifications = user.getNotifications();    Notifications.setChecked(notifications);    Boolean emails = user.getEmails();    Emails.setChecked(emails);}我本来希望它能正常工作并更新并显示正确的信息,因为它在我之前制作的片段中完全做到了这一点,但由于某种原因它一到达 user.getUsername(); 就抛出异常
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

用户为空。检查 null 如下


if(user != null){

String username = user.getUsername();

Username.setText(username);

String email = user.getEmail();

Email.setHint(email);

String mobile = user.getMobile();

Mobile.setHint(mobile);

Boolean notifications = user.getNotifications();

Notifications.setChecked(notifications);

Boolean emails = user.getEmails();

Emails.setChecked(emails);

}


查看完整回答
反对 回复 2023-11-01
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

NullPointerException 原因是,如果您在 null 对象上调用任何方法,那么它肯定会抛出此异常。

直接调用在运行时获取的对象上的方法是不正确的编码实践,除非您 100% 确定存在某个对象,即使该对象为空。因此,只有 NullPointerException 是未经检查的异常。

回答你的问题,

请确认您获得了正确的 userId 并且该 userId 是否存在于数据库中。

searchById(userId),

无法找到具有给定 userId 的对象,因此它会返回。您只需要在调用用户方法之前进行空检查

if(user!=null)

如果值高于条件为真,则执行操作,但这取决于您的业务需求。上述条件只会使您免于此异常,但如果在任何情况下您需要用户对象,请检查您正在获取的 userId 及其在数据库中的存在。

你正在检索


查看完整回答
反对 回复 2023-11-01
?
九州编程

TA贡献1785条经验 获得超4个赞

当您看到此错误时,用户为空,因此您必须在调试模式下检查一些内容:

1.可能这个功能有一些bug:

LoginActivity.tuckBoxDB.tbDao().searchById(userID);
  1. 也许这个函数找不到 int extra 。检查启动活动是否通过了此额外操作,并检查您的密钥(sessionUser)是否在两者中相同:

    getIntent().getIntExtra("sessionUser", 0)


查看完整回答
反对 回复 2023-11-01
  • 3 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信