苦苦于将我的对象写入Parcelable

时间:2013-09-07 20:46:32

标签: java android android-activity parcelable

我正在尝试将一个对象从一个活动发送到另一个活动,因此我正在使用parcelable,而我创建了代码来发送并接收它,(此代码位于底部)似乎我需要一些代码才能将对象实际写入包裹。

Error While Passing An Object From An Activity To Another (Using Parcelable) 我相信我需要做的是与此中给出的答案类似,所以我需要一个writeToParcel方法,我在下面的代码中已经完成了。 (虽然在dest.writeValue(this);是我收到错误的地方)说StackOverFlowError

我相信我可能还需要public static final Parcelable.Creator ...虽然不完全知道如何写它(我试图粗略地写一个并在评论中注明一点)

此外,我不知道我是否需要一点public Clubs (Parcel source) ...

非常感谢任何帮助。感谢

public class Clubs implements Parcelable{   
        public void setEvent(String eventType, String date) {
            this.eventType = eventType;
            this.date = date; 
        }

   //contains lots of defined variables and various methods that 
   //aren't relevant for my question and would take up lots of room
   //all like the one above.


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

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

        @Override
        public void writeToParcel(Parcel dest, int flags) {
                  dest.writeValue(this);
        }

}

我的onItemClick类将对象放入parcel,并启动新活动

public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
                Clubs mymeeting = db.get(map.get(position));
                Intent i = new Intent();
                Bundle b = new Bundle();
                b.putParcelable("mymeeting", mymeeting);
                i.putExtras(b);
                i.setClass(ListSample.this, DynamicEvents.class);
                startActivity(i);
            }

新活动代码的开始,一旦正确发送对象

,将在稍后编辑
public class DynamicEvents extends Activity
{
  protected void onCreate(Bundle savedInstanceState)
  {
      super.onCreate(savedInstanceState);
        Bundle b = getIntent().getExtras();
        // Create the text view
        TextView textView = new TextView(this);
        textView.setTextSize(20);
        textView.setText(" " + b.getParcelable("mymeeting").toString());

        // Set the text view as the activity layout
        setContentView(textView);
  } 
}  

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

writeToParcel方法重写为

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(eventType);
    dest.writeString(date);
}

您可能无法直接编写自定义Java对象。您可以单独编写标准数据值,也可以在serializable对象上创建对象writeSerializable并使用方法Parcel