2011-09-26 52 views
3

我想通过一个意图MyCustomObject类型的对象发送到另一个活动。我知道,使课堂Parcelable,我应该怎么办public class MyCustomObject implements Parcelable,但我不知道对象数组中parcelable如何自定义工作。这是我到目前为止。另外,我是否需要使Search类实现Parcelable呢?创建自定义的Java对象Parcelable在Android的

这是我的更新回答我现在得到一个空对象,当我做intent.getParcelableExtra(search)。也许我没有正确创建搜索数组?

public class MyCustomObject implements Parcelable{ 
    public Search search[]; 

    public MyCustomObject(Parcel in){ 
     in.readArray(MyCustomObject.class.getClassLoader()); 
    } 

    @Override 
    public int describeContents(){ 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags){ 
     dest.writeArray(search) 
    } 

    public static final Parcelable.Creator<MyCustomObject> CREATOR = new Parcelable.Creator<MyCustomObject>(){ 
     @Override 
     public MyCustomObject createFromParcel(Parcel source){ 
      return new MyCustomObject(source); 
     } 

     @Override 
     public MyCustomObject[] newArray(int size){ 
      return new MyCustomObject[size]; 
     } 
    } 

    public static class Search implements Parcelable{ 
     public int rank; 
     public String title; 
     public String[] imageURL; 

     public Search(Parcel in){ 
      rank = in.readInt(); 
      title = in.readString(); 

      String[] url = new String[4]; 
      in.readStringArray(url); 
      url = imageURL 
     } 

     @Override 
     public int describeContents(){ 
      return 0; 
     } 

     @Override 
     public void writeToParcel(Parcel dest, int flags){ 
      dest.writeInt(rank); 
      dest.writeString(title); 
      dest.writeStringArray(imageURL); 
     } 

     public static final Parcelable.Creator<Search> CREATOR = new Parcelable.Creator<Search>(){ 

     @Override 
     public Search createFromParcel(Parcel source){ 
      return new Search(source); 
     } 

     @Override 
     public Search[] newArray(int size){ 
      return new Search[size]; 
     } 
    } 

    } 
} 

回答

7

一些事情。首先,你的搜索对象也需要实现Parcelable。接下来,你需要创建一个名为CREATOR静态字段实现Parcelable.Creator < MyCustomObject>。这将有一个名为createFromParcel的方法,它返回MyCustomObject的一个实例。那就是您从包中读取数据并创建MyCustomObject的新实例的地方。这实际上与writeToParcel相反。这一切都适用于搜索,因为您必须使其实现Parcelable。总结:

  • 使搜索实现Parcelable
  • 实施Search.writeToParcel
  • 创建搜索名为CREATOR实现Parcelable.Creator <搜索>
  • 实施Search.CREATOR的createFromParcel方法静态字段
  • 在MyCustomObject中创建一个名为CREATOR的静态字段,实现Parcelable.Creator < MyCustomObject>
  • 实施CreateFromParcel方法MyCustomObject.CREATOR
+0

感谢您的方向。我照你说的做..但我在in.readStringArray(IMAGEURL)获得NullPointerException异常;我想这不是我想如何读取一个字符串数组。你能快点看看我的答案吗? – Raunak

+0

我修复了上面提到的问题;现在当我做intent.getParcelableExtra(搜索)时,我得到一个空对象。有任何想法吗? – Raunak

+0

不知道'搜索'是什么。我认为这是一个字符串,你用它来把ExpEx放在你用来启动Activity的Intent上。通过增加一个断点你把后MyCustomObject在一个包裹,然后再在接下来的活动时被读出来的意向尝试调试。 – michaelg

1

当您从Parcel中读取数组时,您想要读取一个Search []数组。不是MyCustomObject。

public MyCustomObject(Parcel in){ 
     in.readArray(MyCustomObject.class.getClassLoader()); 
    }