-1

所以我从创建一个自定义对象“Book”开始

Book b = new Book(id, title.getText().toString(),authors , isbn.getText().toString(), "$9.99");

所有这些参数均已定义且不为空。接下来,我将对象“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 []),但数组中的每个元素现在都是空的。我 100% 肯定当它被放入意图时它就在那里。为什么我不能得到这个数组的内容?

4

2 回答 2

3

你需要创建你的BookParcelable,然后你可以将它作为Parcelable数组传递Bundle给并直接从Bundle.

查看简单的 Parcelable 示例

假设你的代码

  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);
于 2014-02-07T06:50:04.243 回答
0

在下一个活动中使用 book 作为实现 Serialisable 和 getserialisable 对象。

于 2014-02-07T06:48:34.640 回答