2011-09-26 3 views
3

MyCustomObject 유형의 객체를 인 텐트를 통해 다른 활동으로 보내려고합니다. 알아요, Parcelable 클래스를 만들려면 public class MyCustomObject implements Parcelable을 사용해야합니다. 그러나 사용자 정의 개체 배열이 parcelable에서 작동하는 방법을 잘 모르겠습니다. 여기에 제가 지금까지 가지고있는 것이 있습니다 .. 또한 Search 클래스가 Parcelable을 구현하도록해야합니까?맞춤 자바 객체 만들기 안드로이드에서 소멸 가능

내 대답은입니다. 지금 intent.getParcelableExtra(search) 일 때 null 개체가 나타납니다. 검색 배열을 제대로 만들지 않았을 수 있습니까?

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을 구현해야합니다. 그런 다음 Parcelable.Creator < MyCustomObject>를 구현하는 CREATOR라는 정적 필드를 만들어야합니다. 그러면 MyCustomObject의 인스턴스를 반환하는 createFromParcel이라는 메서드가 생깁니다. 여기서 소포에서 데이터를 읽고 MyCustomObject의 새 인스턴스를 만듭니다. 이것은 본질적으로 writeToParcel과 반대입니다. 이 모두는 Parcelable을 구현해야하므로 Search에도 적용됩니다. 요약 :

  • 만들기 검색 Parcelable는
  • Search.writeToParcel을 구현 구현
  • Parcelable.Creator이 < 검색>
  • Search.CREATOR의 createFromParcel 방법을 구현 구현 검색이라는 CREATOR의 정적 필드 만들기
  • Parcelable.Creator를 구현하는 CREATOR라는 정적 필드를 만듭니다. < MyCustomObject>
  • MyCustomObject.CREATOR의 createFromParcel 메서드
+0

감사합니다. 당신이 말한대로 해봤지만 .. in.readStringArray (imageURL);에서 nullpointerexception을 얻고 있습니다. 문자열 배열을 읽는 방법이 아닌 것 같습니다. 내 대답을 빨리 볼 수 있니? – Raunak

+0

위의 문제를 수정했습니다. 이제는 intent.getParcelableExtra (search) 할 때 null 객체가 생깁니다. 어떤 아이디어? – Raunak

+0

'검색'이 무엇인지 확실하지 않습니다. 나는 그것을 문자열이라고 가정하고 Activity를 시작하는 데 사용 된 Intent에 Extra를 배치하는 데 사용했습니다. MyCustomObject를 소포 (Parcel)에 넣은 다음 중단 점을 추가하여 디버깅을 시도한 다음 의도를 읽었을 때 다음 활동 (Activity)에서 다시 시도하십시오. – michaelg

1

Parray에서 ArrayArray를 읽으면 검색 [] 배열을 읽어야합니다. MyCustomObject가 아닙니다.

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