Передать сериализуемый объект через намерение
Это моя первая попытка найти решение моей проблемы, поэтому постарайтесь быть добрыми парнями! Я нашел множество решений проблем, с которыми я имею дело на этом сайте, выполнив простой поиск, но на этот раз мне не повезло, я думаю. Я не нашел ничего подходящего моей проблеме, поэтому я перестал задавать новый вопрос.
Я пытаюсь передать объект через намерение от одного действия к другому. У меня есть один абстрактный класс и два подкласса (один из них также абстрактный) следующим образом. Мне нужно, чтобы они были абстрактными. Я удалил много кода (абстрактные методы и т. Д.) Только для того, чтобы выяснить, в чем проблема, и я получил эти действительно простые классы, и у меня все еще остается та же проблема.
public abstract class MyObject {
private boolean New;
private boolean Modified;
public MyObject() {
New = true;
}
public boolean isNew() {
return New;
}
protected void setNew(boolean value) {
New = value;
}
protected boolean isModified() {
return Modified;
}
protected void setModified(boolean value) {
Modified = value;
}
}
public abstract class MyItemBase extends MyObject {
private Long Id;
private String Description;
public MyItemBase() {
super();
}
public Long getId() {
return Id;
}
public void setId(Long id) {
Id = id;
}
public String getDescription() {
return Description;
}
public void setDescription(String description) {
Description = description;
}
}
public class MyItem extends MyItemBase implements Serializable {
private static final long serialVersionUID = -2875901021692711701L;
public MyItem() {
super();
}
}
У меня есть две операции, ActivityA с кнопкой для вызова ActivityB следующим образом.
public class ActivityA extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
Button btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(),
ActivityB.class);
MyItem item = new MyItem();
item.setId((long) 1);
item.setDescription("test");
intent.putExtra("MyItem", (Serializable) item);
startActivityForResult(intent, 1);
}
});
}
}
public class ActivityB extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
MyItem item = (MyItem) getIntent().getSerializableExtra("MyItem");
((TextView) findViewById(R.id.text)).setText(item.getDescription());
}
}
Поэтому, когда я получаю MyItem из второго действия без каких-либо ошибок, оба свойства Id и Description равны нулю. На самом деле это новый объект, потому что свойство New имеет значение true. Теперь, если я попытаюсь получить объект точно после того, как поместил его в намерение в первом действии, вот так
intent.putExtra("MyItem", (Serializable) item);
MyItem newItem = (MyItem) intent.getSerializableExtra("MyItem");
startActivityForResult(intent, 1);
это работает отлично. newItem имеет все свойства с правильными значениями.
Есть идеи?
Спасибо всем заранее!