2010-11-15 5 views
6

Bazı bağlamlarda çalışabilen bir Activity adresine veri göndermem gerekiyor. Bunun için, ArrayList veri türüne sahip A sınıfını, örnek üyelerinden biri olarak B deyin. B sınıfını A sınıfı sınıf olarak ilan ettim. A sınıfı bu örneği Intent aracılığıyla göndermek için A ve B sınıflarını Parcelable olarak yaptım. İç içe Parcelling: RuntimeException - Bilinmeyen tip kodu 3211319 ofset 440

public class A implements Parcelable{ 

    public class B implements Parcelable{ 
     public ArrayList<String> value; 
     .... 
     .... 
      public void writeToParcel(Parcel dest, int flags) { 
      dest.writeList(value); 
      } 
     .... 
     .... 
    } 

    public List<B> group; 
    public String name; 

    .... 
    .... 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeList(group); 
     dest.writeString(name); 
     } 
    .... 
    .... 
} 

Verileri koymak için putExtra (String name, Parcelable value) fonksiyon kullanılır:

sınıfı yapısı (bu sınıflar Parcelable yapmak için yazılı tam kod, örneğin kod içermez), bu gibi bir şeydir. Bu iç sınıfın sorun olabilir düşünce olarak ben (sınıf A dışında, sınıf B taşındı Sonra

Uncaught handler: thread main exiting due to uncaught exception 
E/AndroidRuntime(1087): 1289817569622 java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.SET_VOIP_SUPP_SERVICE_REQUEST_LOCAL (has extras) } in [email protected] 
E/AndroidRuntime(1087):  at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:765) 
E/AndroidRuntime(1087):  at android.os.Handler.handleCallback(Handler.java:587) 
E/AndroidRuntime(1087):  at android.os.Handler.dispatchMessage(Handler.java:92) 
E/AndroidRuntime(1087):  at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime(1087):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
E/AndroidRuntime(1087):  at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(1087):  at java.lang.reflect.Method.invoke(Method.java:521) 
E/AndroidRuntime(1087):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
E/AndroidRuntime(1087):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
E/AndroidRuntime(1087):  at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime(1087): Caused by: java.lang.RuntimeException: Parcel [email protected]: Unmarshalling unknown type code 3211319 at offset 440 
E/AndroidRuntime(1087):  at android.os.Parcel.readValue(Parcel.java:1777) 
E/AndroidRuntime(1087):  at android.os.Parcel.readListInternal(Parcel.java:1956) 
E/AndroidRuntime(1087):  at android.os.Parcel.readList(Parcel.java:1302) 
E/AndroidRuntime(1087):  at com.hsc.example.android.MyApp.A.<init>(A.java:61) 
E/AndroidRuntime(1087):  at com.hsc.example.android.MyApp.A.<init>(A.java:57) 
E/AndroidRuntime(1087):  at com.hsc.example.android.MyApp.A$1.createFromParcel(A.java:67) 
E/AndroidRuntime(1087):  at com.hsc.example.android.MyApp.A$1.createFromParcel(A.java:1) 
E/AndroidRuntime(1087):  at android.os.Parcel.readParcelable(Parcel.java:1845) 
E/AndroidRuntime(1087):  at android.os.Parcel.readValue(Parcel.java:1713) 
E/AndroidRuntime(1087):  at android.os.Parcel.readMapInternal(Parcel.java:1947) 
E/AndroidRuntime(1087):  at android.os.Bundle.unparcel(Bundle.java:169) 
E/AndroidRuntime(1087):  at android.os.Bundle.getParcelable(Bundle.java:1037) 
E/AndroidRuntime(1087):  at android.content.Intent.getParcelableExtra(Intent.java:3269) 
E/AndroidRuntime(1087):  at com.hsc.example.android.MyApp.MyAppActuvity$1.onReceive(MyAppActuvity.java:219) 
E/AndroidRuntime(1087):  at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:754) 
E/AndroidRuntime(1087):  ... 9 more 

ve CREATOR ilan:

Ama alıcı tarafında

, aşağıdaki özel durum var Statik: Bu statik beyan, B sınıfı A Sınıfı bir iç sınıf olduğunda mevcut değildi. Ama yardım etmedi.

Bu sorunun yuvalanmış Parceling nedeniyle olduğu görülmektedir.

Herhangi bir öneri ??

NOT: Ben Paketi sınıfının fonksiyonunu kullanılan ve sonra android.os.Bundle.getParcelable(String key) kullanarak unmarshalled zaman sonra her şey gayet iyi. Öyleyse sorun sadece Intents ile ilgili.

+1

ArrayList okumak için? Benzer bir senaryo ile uğraşmak zorundayım. – Ita

cevap

1

CREATOR'u her ikisine de dahil ettiniz mi? Bir Parsel almak

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

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

& kurucular:

public A(Parcel parcel) { 
    name = parcel.readString(); 
    //etc.. 
} 

? ArrayList<B>

  • Kullanım writeTypedList ve readTypedList için

  • +0

    Bu "EventFilter" bir kopyalama + yapıştırma hatası mı? – Mehmed

    +0

    Evet, cevabı düzeltdim, teşekkürler – FunkTheMonk

    0
    1. Değişim List<B> yazmak ve şimdiye kadar bu konuda bir çözüm buldunuz