实现Parcelable对象时出错

时间:2014-04-19 01:03:25

标签: android parcelable

我是Android开发的新手。

我不明白为什么以下代码会给我一个stackoverflower错误

Intent intent = new Intent(view.getContext(), MakeCall.class);
SipParcelable sipp = new SipParcelable(_sip);
intent.putExtra("sip", (Parcelable) sipp);

startActivity(intent);

基本上,只要startActivity(intent)触发,我就会收到以下错误:

enter image description here

我可以通过使用putExtra()函数注释第三行来消除错误。

我试图将我的_sip对象传递给另一个即将加载的屏幕上的MakeCall.class活动。我试着按照教程了解如何实现Parcelable类/对象。这是我的SipParcelable代码的样子:

import com.myproject.library.SipService;
import android.os.Parcel;
import android.os.Parcelable;


public class SipParcelable implements Parcelable{

    public SipService mData;

    /* everything below here is for implementing Parcelable */

    // 99.9% of the time you can just ignore this
    public int describeContents() {
        return 0;
    }

    // write your object's data to the passed-in Parcel
    public void writeToParcel(Parcel out, int flags) {
        out.writeValue(mData);
    }

    public SipParcelable(SipService sip)
    {
        mData = sip;
    }

 // Parcelling part
    public SipParcelable(Parcel in){
        mData = (SipService) in.readValue(SipService.class.getClassLoader());

    }

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

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

}

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的SipService类必须实现parcelabe并修改如何从/向pracel读取和写入SipService对象。

查看本教程可能会对您有所帮助

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

你也可以使用serialisable ......但是parcelable更快更好

注意:实现parcelable的对象的所有属性(如果属性是对象)也必须是可分区的。