Android Studio开发电商App调用currentOnlineUser.getName空指针如何解决
问题根因
报错指向Prevalent.currentOnlineUser.getName()调用时空指针,本质是你定义的静态变量public static Users currentOnlineUser从未被赋值初始化,默认值为null,直接调用方法就触发崩溃。
解决方案
1. 临时防崩溃处理(先解决闪退问题)
修改HomeActivity中设置用户名的代码,增加空判断逻辑:
View headerView = navigationView.getHeaderView(0); TextView userNameTextView = headerView.findViewById(R.id.user_profile_name); CircleImageView profileImageView = headerView.findViewById(R.id.user_profile_image); // 新增空判断 if (Prevalent.currentOnlineUser != null) { userNameTextView.setText(Prevalent.currentOnlineUser.getName()); } else { // 未登录时显示默认值 userNameTextView.setText("未登录"); }
2. 补全变量赋值逻辑
你需要在用户登录验证成功的节点,给静态变量赋值,示例代码:
// 假设你登录成功后拿到了后端返回的用户信息,构造Users实例 Users loginSuccessUser = new Users(nameFromServer, phoneFromServer, pwdFromServer); // 赋值给静态变量,后续全局可以访问 Prevalent.currentOnlineUser = loginSuccessUser;
3. 增加登录拦截逻辑
避免未登录状态直接进入HomeActivity,在HomeActivity的onCreate方法最开头增加判断:
if (Prevalent.currentOnlineUser == null) { // 未登录跳转到登录页 startActivity(new Intent(HomeActivity.this, LoginActivity.class)); finish(); return; }
4. 持久化优化(解决进程被杀后重启崩溃问题)
静态变量会在APP进程被系统回收后清空,建议把用户信息存储到SharedPreferences,每次APP启动时读取赋值:
登录成功后存储用户信息
SharedPreferences sp = getSharedPreferences("app_user", MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.putString("name", loginSuccessUser.getName()); editor.putString("phone", loginSuccessUser.getPhone()); editor.putString("pwd", loginSuccessUser.getPassword()); editor.apply();
启动时读取信息赋值(放在Application或启动页的onCreate中)
SharedPreferences sp = getSharedPreferences("app_user", MODE_PRIVATE); String name = sp.getString("name", null); String phone = sp.getString("phone", null); String pwd = sp.getString("pwd", null); if (name != null && phone != null) { Prevalent.currentOnlineUser = new Users(name, phone, pwd); }
内容的提问来源于stack exchange,提问作者natasha rondot
相关产品推荐
相关产品推荐

