2014-04-19 39 views
0

我对Android开发很陌生。实现Parcelable对象时出错

我不明白,为什么下面的代码,一旦给了我的StackOverflowError

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

startActivity(intent); 

基本上为startActivity(意向)火灾,我得到以下错误:

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]; 
     } 
    }; 

} 

我在做什么错?

+0

为什么不先把可分类放入一个包中?你也在你的SipParcelable类中缺少CREATOR字段 –

+0

SipService'是否可以分类?也就是说它自己实现了Parcelable吗? –

+0

SipService不实现Parcelable。我希望把它作为一个属性放到一个SipParcelable类中。这是做到这一点的正确方法吗?因为我不允许修改课程SipService – John

回答

1

您的SipService类必须实现parcelabe并修改SipService对象从/到pracel的读写方式。

检查本教程它可以帮助你

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

您可以使用serialisable太...但parcelable是更快,更好

注:对象的所有属性(如果属性的对象)实现parcelable,也必须是parcelable以及。

+0

但我不明白为什么SipParcelable不可Parcelable?或者为什么我的SipParcelable不能有一个属性是一个对象? – John

+0

特别是因为我不允许修改SipService,所以我不能让它实现parcelable ....但我想我必须扩展它然后实现它....但后来回到我的评论 – John

+0

因为您需要编写如何将该对象的属性写入包并从中读取。这就是为什么你必须自己实现它 – mha90

相关问题