猿问

为什么我总是抛出 NullPointerException?

我正在尝试将活动用户信息加载到新活动中并显示它。我在不同的活动中做过类似的事情,并且效果很好,但由于某种原因,情况并非如此,我不确定。每当 android studio 尝试调用用户的方法时,它都会抛出 NullPointerException。


我已经尝试了我能想到的一切,重新格式化其编写方式,嵌套在不同的方法中,以不同的方式将数据传递给它。没有任何效果,我发现的关于该主题的每一篇文章都没有任何帮助


@Override

protected 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(); 就抛出异常


慕姐4208626
浏览 104回答 3
3回答

守候你守候我

用户为空。检查 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);}

喵喵时光机

NullPointerException 原因是,如果您在 null 对象上调用任何方法,那么它肯定会抛出此异常。直接调用在运行时获取的对象上的方法是不正确的编码实践,除非您 100% 确定存在某个对象,即使该对象为空。因此,只有 NullPointerException 是未经检查的异常。回答你的问题,请确认您获得了正确的 userId 并且该 userId 是否存在于数据库中。searchById(userId),无法找到具有给定 userId 的对象,因此它会返回。您只需要在调用用户方法之前进行空检查if(user!=null)如果值高于条件为真,则执行操作,但这取决于您的业务需求。上述条件只会使您免于此异常,但如果在任何情况下您需要用户对象,请检查您正在获取的 userId 及其在数据库中的存在。你正在检索

九州编程

当您看到此错误时,用户为空,因此您必须在调试模式下检查一些内容:1.可能这个功能有一些bug:LoginActivity.tuckBoxDB.tbDao().searchById(userID);也许这个函数找不到 int extra 。检查启动活动是否通过了此额外操作,并检查您的密钥(sessionUser)是否在两者中相同:getIntent().getIntExtra("sessionUser", 0)
随时随地看视频慕课网APP

相关分类

Java
我要回答