Android Intent extras返回null属性

时间:2014-02-07 06:43:42

标签: android android-intent onactivityresult

所以我首先创建一个自定义对象“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。当它被置于意图中时,我百分之百肯定。为什么我不能得到这个数组的内容?

2 个答案:

答案 0 :(得分:2)

您需要制作Book课程Parcelable然后将其作为Parcelable数组传递到Bundle并直接从Bundle获取。< / p>

查看Simple Parcelable Example

假设你的代码

  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对象。