3

필자는 다음과 같은 분류 가능한 인터페이스를 구현하는 클래스들을 가지고있다.액티비티간에 파싱 할 수있는 객체 전달하기

사용자

public class User implements Parcelable { 

    public long id; 
    public String username; 
    public String email; 

    public String firstName; 
    public String description; 
    public String city; 

    public int numBeezs; 
    public int numLikes; 

    public String avatar; 
    public String background; 

    public String token; 

    public User() {} 

    public User(Parcel parcel) { 
      id = parcel.readInt(); 
      username = parcel.readString(); 
      email = parcel.readString(); 

      firstName = parcel.readString(); 
      description = parcel.readString(); 
      city = parcel.readString(); 

      numBeezs = parcel.readInt(); 
      numLikes = parcel.readInt(); 

      avatar = parcel.readString(); 
      background = parcel.readString(); 

      token = parcel.readString(); 
    } 

    public static final Parcelable.Creator<User> CREATOR = new Parcelable.Creator<User>() { 
      public User createFromParcel(Parcel in) { 
        return new User(in); 
      } 

      public User[] newArray(int size) { 
        return new User[size]; 
      } 
    }; 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
      dest.writeLong(id); 
      dest.writeString(username); 
      dest.writeString(email); 

      dest.writeString(firstName); 
      dest.writeString(description); 
      dest.writeString(city); 

      dest.writeInt(numBeezs); 
      dest.writeInt(numLikes); 

      dest.writeString(avatar); 
      dest.writeString(background); 

      dest.writeString(token); 
    } 

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

} 

식민지

public class Colony implements Parcelable { 

    public long id; 
    public String name; 
    public String image; 

    public int numBeezs; 
    public int numFollowers; 

    public boolean following; 

    public Colony (Parcel parcel) { 
      id = parcel.readInt(); 
      name = parcel.readString(); 
      image = parcel.readString(); 

      numBeezs = parcel.readInt(); 
      numFollowers = parcel.readInt(); 

      following = parcel.readInt() == 1; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
      dest.writeLong(id); 
      dest.writeString(name); 
      dest.writeString(image); 

      dest.writeInt(numBeezs); 
      dest.writeInt(numFollowers); 

      dest.writeInt(following ? 1 : 0); 
    } 


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

      public Colony createFromParcel(Parcel in) { 
        return new Colony(in); 
      } 

      public Colony[] newArray(int size) { 
        return new Colony[size]; 
      } 
    }; 

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

그리고 마지막

Beez

public class Beez implements Parcelable { 
    public Beez(Parcel parcel) { 
      id = parcel.readLong(); 
      text = parcel.readString(); 
      media = parcel.readString(); 

      user = parcel.readParcelable(User.class.getClassLoader()); 
      numLikes = parcel.readInt(); 
      numReplies = parcel.readInt(); 

      address = parcel.readParcelable(Address.class.getClassLoader()); 

      created = new Date(parcel.readLong()); 
      updated = new Date(parcel.readLong()); 

      colonies = new ArrayList<Colony>(); 
      parcel.readTypedList(colonies, Colony.CREATOR); 
    } 

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

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
      dest.writeLong(id); 
      dest.writeString(text); 
      dest.writeString(media); 

      dest.writeParcelable(user, user.describeContents()); 
      dest.writeInt(numLikes); 
      dest.writeInt(numReplies); 

      dest.writeParcelable(address, address.describeContents()); 

      dest.writeLong(created.getTime()); 
      dest.writeLong(updated.getTime()); 

      dest.writeTypedList(colonies); 
    } 

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

      public Beez createFromParcel(Parcel in) { 
        return new Beez(in); 
      } 

      public Beez[] newArray(int size) { 
        return new Beez[size]; 
      } 
    }; 
} 
다음

, 내 ArrayAdapter와에서 활동을 시작합니다

// prepare intent 
Intent intent = new Intent(activity, ActivityBeez.class); 

// add beez to intent 
Beez beez = getItem(position); 
intent.putExtra(ActivityBeez.EXTRA_BEEZ, beez); 

// start activity 
activity.startActivity(intent); 

로그 고양이 반환 : 내가 잘못 뭐하는 거지

02-20 18:48:48.000: E/Parcel(11598): Class not found when unmarshalling: Álvaro iOS dev at Beezer Palma /media/usr/original/197.jpg /media/bgr/original/197.jpg, e: java.lang.ClassNotFoundException: Álvaro iOS dev at Beezer Palma /media/usr/original/197.jpg /media/bgr/original/197.jpg 

를? 나는 이해할 수있는 인터페이스를 구현하기 위해 this guide을 따라 갔다.

+0

Parcelable 구현과 관련이 있습니까? putExtra와 그 사용법을 주석으로 확인해 주시겠습니까? – Prakash

+0

문제는 아마도 putExtra를 사용했을 것입니다. 이것을 시도하십시오 http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/ – AndyFaizan

답변

1

필자는 소포에서 int를 읽었으며 (Colony와 User에서) 나는 오랫동안 글을 쓰고있었습니다.

public Colony (Parcel parcel) { 
     id = parcel.readInt(); 

public void writeToParcel(Parcel dest, int flags) { 
     dest.writeLong(id);