【发布时间】:2017-10-15 04:33:13
【问题描述】:
我正在尝试通过意图将数据从活动发送到其他活动。发送 String 或 integer 工作得很好。但是当我以相同的意图添加 Parecelable 对象时,它总是为 Strings 、 Integers 和 返回 null对象。下面是我将数据设置为意图的代码。
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("SomeText", "sometext");
intent.putExtra("itemId", itemId);
intent.putExtra("someuser",user);
startActivity(intent);
在其他活动中,我得到的值如下:
String som = getIntent().getStringExtra("SomeText");
int itemird = getIntent().getIntExtra("itemId", 0);
User user = getIntent().getParcelableExtra("someuser");
我也尝试了不同的其他解决方案,如this 和 this 和 this
这里有人可以建议我我的错误是什么或更好的解决方案吗?
所以这是我的 Parcelable 类
public class User implements Parcelable{
private int mData;
private String username;
private String imagePath;
private String userId;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public void setImagePath(String imagePath) {
this.imagePath = imagePath;
}
public String getImagePath() {
return imagePath;
}
public User() {
}
public User(String username, String userId) {
this.username = username;
this.userId = userId;
}
public User(String username) {
this.username = username;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}
public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() {
public User createFromParcel(Parcel in) {
return new User(in);
}
public User[] newArray(int size) {
return new User[size];
}
};
private User(Parcel in) {
mData = in.readInt();
}
}
【问题讨论】:
-
您可以使您的自定义 Java 对象实现 Serializable 并使用 putExtra。如果它不起作用,请粘贴错误日志。
-
这可能是您的 User 类中实现 parcelable 接口方法的问题。你能把这些方法贴在这里吗?
-
你必须坚持
writeToParcel中的所有属性并在构造函数User(Parcel in)中读取所有属性,请参阅此链接以获得更好的我的意思stackoverflow.com/questions/21250339/…
标签: android android-intent android-activity bundle