Android中Intent跳转Activity传值为空问题求助
问题排查与解决建议
1. 确认实体类实现序列化接口
如果userLogin是自定义实体类,必须实现Serializable或Parcelable接口才能通过Intent传递:
实现Serializable示例
public class UserLogin implements Serializable { private String nickname; // 其他字段、getter/setter方法 }
实现Parcelable示例(更高效)
public class UserLogin implements Parcelable { private String nickname; // 构造方法、getter/setter @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(nickname); // 其他字段依次写入 } public static final Creator<UserLogin> CREATOR = new Creator<UserLogin>() { @Override public UserLogin createFromParcel(Parcel in) { return new UserLogin(in); } @Override public UserLogin[] newArray(int size) { return new UserLogin[size]; } }; protected UserLogin(Parcel in) { nickname = in.readString(); // 其他字段依次读取 } }
2. 检查Intent传递与接收的键名一致性
- AuthActivity传递代码:确保键名唯一且后续接收时一致
Intent intent = new Intent(AuthActivity.this, BasketActivity.class); intent.putExtra("USER_LOGIN_DATA", userLogin); startActivity(intent);
- BasketActivity接收代码:使用相同键名,匹配序列化类型
// 对应Serializable UserLogin userLogin = (UserLogin) getIntent().getSerializableExtra("USER_LOGIN_DATA"); // 对应Parcelable // UserLogin userLogin = getIntent().getParcelableExtra("USER_LOGIN_DATA"); if (userLogin != null) { nicknameTv.setText(userLogin.getNickname()); }
3. 验证传递前userLogin对象的有效性
在AuthActivity传递前,确认对象及目标字段不为空:
if (userLogin != null && userLogin.getNickname() != null) { // 执行Intent跳转逻辑 } else { Log.e("AuthActivity", "userLogin或昵称字段未初始化"); }
4. 重写实体类的toString()方法
如果调用toString()才显示内容,说明你用的是Object默认toString()(输出对象内存地址),重写后才能显示实际字段值:
@Override public String toString() { return "UserLogin{" + "nickname='" + nickname + '\'' + // 其他字段 '}'; }
内容的提问来源于stack exchange,提问作者tryouq
相关产品推荐
相关产品推荐

