2012-12-19 2 views
1

하나의 세부 활동에서 개인 활동으로 개체를 보내려고합니다. 내가 튜토리얼을 따라하지만 다음과 같은 오류 얻을 :한 활동에서 다른 활동으로 개체를 전송할 수 없습니다.

여기
12-19 08:19:00.434: E/AndroidRuntime(1011): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.workingonlist/com.example.workingonlist.Persons}: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class com.example.workingonlist.Person 

는 사람의 모델 :

public class Person implements Parcelable { 

    private String name; 
    private String surname; 
    private String gender; 

    public Person() { 
     // TODO Auto-generated constructor stub 
    } 

    public Person(Parcel in){ 
     name= in.readString(); 
     surname= in.readString(); 
     gender= in.readString(); 
    } 

    public Person(String name,String surname,String gender){ 
     this.name=name; 
     this.surname=surname; 
     this.gender=gender; 
    } 

     // getters and setters 

    @Override 
    public int describeContents() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeString(name); 
     dest.writeString(surname); 
     dest.writeString(gender); 
    } 

    private Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() { 

     @Override 
     public Person createFromParcel(Parcel source) { 
      // TODO Auto-generated method stub 
      return new Person(source); 
     } 

     @Override 
     public Person[] newArray(int size) { 
      // TODO Auto-generated method stub 
      return new Person[size]; 
     } 

    }; 
} 

이 세부 활동이다 나는 사람 개체를 보내려고합니다.

private View.OnClickListener onClick = new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     if(v.getId()==btn_save.getId()){ 
      Person p = new Person(); 
      p.setName(et_name.getText().toString()); 
      p.setSurname(et_surname.getText().toString()); 


      switch(rg.getCheckedRadioButtonId()){ 
       case R.id.button1:{ 
        p.setGender("Male"); 
        break; 
       } 
       case R.id.button2:{ 
        p.setGender("Female"); 
        break; 
       } 
      } 

      Intent i = new Intent(Details.this,Persons.class); 
      i.putExtra("person",p); 
      startActivity(i); 
     } 
    } 
}; 

다음은 Person 개체를 가져오고 자하는 Persons Activity입니다.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 

    PersonAdapter adapter = new PersonAdapter(); 

    setContentView(R.layout.persons); 
    Bundle b = getIntent().getExtras(); 
    if (b != null) { 
     Person p = b.getParcelable("person"); 
     adapter.add(p); 
    } 

    setListAdapter(adapter); 
} 

이 문제를 해결하려면 어떻게해야합니까? 어떤 도움을 주셔서 감사합니다. 미리 감사드립니다. 문제를 다루는이 자습서에서

+0

가능한 중복 [나쁜 Parcelable 예외] (http://stackoverflow.com/questions/12348627/bad-parcelable-exception) –

답변

1

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

      public Person[] newArray(int size) { 
       return new Person[size]; 
      } 
     }; 
당신은 공공 정적 최종 사용자의 CREATOR를 설정해야합니다

http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/

+0

덕분에 지금이 그냥 만족하는 경우 당신의 도움 :) –

+0

에 대한 감사를 작동하고 많은 대답을 수락하고 투표하십시오! 감사합니다 –

4

:

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() 
+0

고마워요 지금은 당신의 도움을 위해 노력하고 있습니다 :) –

0

내가 추가 할 수없는 이유 Festus Tamakloe의 대답에 대한 의견을 말했지만, 저는 이것이 나를 도왔다 고 덧붙이고 싶었습니다. 정적 생성자를 사용하는 자습서를 따르고있었습니다. 나는 그것에 "공개"가 없었어요!

그래서 공개해야합니다. 의

관련 문제