2014-02-07 37 views
-1

于是我开始通过创建一个自定义对象“尚书”Android的意图的额外返回null属性

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

所有这些参数的定义,而不是空。接下来,我将对象“b”并将其置于意图如下:

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); 

这里存在这个问题。这本书的所有属性都在那里,除了作者[]。我得到的是一个长度正确的数组(作者[]),但数组中的每个元素现在都是空的。当它被置于意图中时,我百分之百的积极。为什么我不能得到这个数组的内容?

+0

您的Book类是否可以实现可分辨? – Raghunandan

+0

您不能直接在Intent中传递对象。你需要将它作为'Bundle'传递并从'Bundle'中获取。 – GrIsHu

+0

已经实现Book类与parcelable? –

回答

0

在下一个活动中使用书籍作为工具Serialisable和getserialisable对象。

+1

如果他处理了Parcelable,那么问题是什么?为什么可串行化,如果Android给了Parcelable? –

+0

两者都是相同的功能,但我使用serialisable.parcelable做也是不错的:) – Amish

+0

我亲爱的朋友在android serializable是不好的。 –

2

你需要让你的BookParcelable类,然后你可以把它作为Parcelable数组Bundle,并直接从Bundle得到它。

时退房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 data = getIntent().getExtras(); 

Book b = (Book)data.getParcelable(AddBookActivity.BOOK_RESULT_KEY);