所以我首先创建一个自定义对象“Book”
Book b = new Book(id, title.getText().toString(),authors , isbn.getText().toString(), "$9.99");
所有这些参数都已定义且不为null。接下来,我将对象“b”放入Intent,如下所示:
resultIntent.putExtra(BOOK_RESULT_KEY, b);
仍然很好。在这里检索对象可以获得预期的内容:
Book test = (Book) resultIntent.getExtras().get(BOOK_RESULT_KEY);
完成并返回父活动,结果是意图:
setResult(RESULT_OK, resultIntent);
finish();
关闭父活动:
Book b = (Book) intent.getExtras().get(AddBookActivity.BOOK_RESULT_KEY);
这就是问题所在。除了作者[]之外,这个对象书的所有属性都在那里。我得到的是一个具有正确长度的数组(authors []),但是数组中的每个元素现在都为null。当它被置于意图中时,我百分之百肯定。为什么我不能得到这个数组的内容?
答案 0 :(得分:2)
您需要制作Book
课程Parcelable
然后将其作为Parcelable
数组传递到Bundle
并直接从Bundle
获取。< / p>
假设你的代码
public class Book implements Parcelable{
private String id;
private String title;
private String authors;
private String isbn;
private String price;
// Constructor
public Student(String id, String title, String authors,String isbn,String price){
this.id = id;
this.title= title;
this.authors = authors;
this.isbn=isbn;
this.price=price;
}
......................................
// Parcelling part
public Book(Parcel in){
String[] data = new String[5];
in.readStringArray(data);
this.id = data[0];
this.title= data[1];
this.authors= data[2];
this.isbn= data[3];
this.price= data[4];
}
@Оverride
public int describeContents(){
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeStringArray(new String[] {this.id,
this.title,
this.authors,this.isbn,this.price});
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Book createFromParcel(Parcel in) {
return new Book(in);
}
public Book[] newArray(int size) {
return new Book[size];
}
};
}
现在,在创建Parcelable类之后,您可以按如下方式传递数据:
resultIntent.putExtra(BOOK_RESULT_KEY,new Book(id, title.getText().toString(),authors , isbn.getText().toString(), "$9.99"));
从Bundle获取数据如下:
Bundle data = getIntent().getExtras();
Book b = (Book)data.getParcelable(AddBookActivity.BOOK_RESULT_KEY);
答案 1 :(得分:0)
在下一个活动中使用book作为实现Serialisable和getserialisable对象。