2013-03-14 2 views
0

Я не могу реализовать Parcelable на мой атрибут объекта «ArrayList», по-видимому, мой атрибут «ArrayList работает, почему, потому что я использую тот же метод:Parcelable ArrayList <LatLng> Android

in.readTypedList(etapes,Step.CREATOR);   
in.readTypedList(points, LatLng.CREATOR);//BUG  

Мой класс, и конечно: "импорт com.google.android.gms.maps.model.LatLng;"

public class Road implements Parcelable { 
    public String depart; 
    public String arrivee; 
    public int distance; 
    public int duration; 
    public ArrayList<Step> etapes = new ArrayList<Step>(); 
    public String travel_mode; 
    public LatLngBounds bounds;  
    public ArrayList<LatLng> points = new ArrayList<LatLng>(); 

    public Road(String depart, String arrivee, int distance, int duration, ArrayList<Step> etapes, String travel_mode, ArrayList<LatLng> points){ 

     this.depart = depart; 
     this.arrivee = arrivee; 
     this.distance = distance; 
     this.duration = duration; 
     this.etapes = etapes; 
     this.travel_mode = travel_mode;     

     LatLngBounds.Builder builder = new LatLngBounds.Builder(); 
     for(int i=0; i<points.size();i++){    
      builder.include(points.get(i));    
     } 
     bounds = builder.build(); 
     this.points = points; 

    }   

    private Road(Parcel in){ 
     depart = in.readString(); 
     arrivee = in.readString(); 
     distance = in.readInt(); 
     duration = in.readInt(); 
     in.readTypedList(etapes,Step.CREATOR);//GOOD    
     travel_mode = in.readString(); 
     LatLng ne = new LatLng(in.readDouble(),in.readDouble()); 
     LatLng sw = new LatLng(in.readDouble(),in.readDouble()); 
     LatLngBounds.Builder builder = new LatLngBounds.Builder(); 
     builder.include(ne); 
     builder.include(sw); 
     bounds = builder.build();   
     in.readTypedList(points, LatLng.CREATOR);//BUG  
    } 

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

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     // TODO Auto-generated method stub   
     dest.writeString(depart); 
     dest.writeString(arrivee); 
     dest.writeInt(distance); 
     dest.writeInt(duration);    
     dest.writeTypedList(etapes);    
     dest.writeString(travel_mode); 
     dest.writeDouble(bounds.northeast.latitude); 
     dest.writeDouble(bounds.northeast.longitude); 
     dest.writeDouble(bounds.southwest.latitude); 
     dest.writeDouble(bounds.southwest.longitude);   
     dest.writeParcelable(bounds, flags); 
     dest.writeTypedList(points);    
    }  

    public static final Parcelable.Creator<Road> CREATOR = 
      new Parcelable.Creator<Road>() { 

     public Road createFromParcel(Parcel in){ 
      return new Road(in); 
     } 
     public Road[] newArray(int size){ 
      return new Road[size];   
     } 
    };  

}

мой StackTrace:

03-14 14:34:12.431: E/AndroidRuntime(9809): FATAL EXCEPTION: main 
03-14 14:34:12.431: E/AndroidRuntime(9809): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.TEST flg=0x10 (has extras) } in [email protected] 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:794) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at android.os.Handler.handleCallback(Handler.java:608) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at android.os.Handler.dispatchMessage(Handler.java:92) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at android.os.Looper.loop(Looper.java:156) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at android.app.ActivityThread.main(ActivityThread.java:5099) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at java.lang.reflect.Method.invoke(Method.java:511) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at dalvik.system.NativeStart.main(Native Method) 
03-14 14:34:12.431: E/AndroidRuntime(9809): Caused by: com.google.android.gms.internal.aw$a: Expected object header. Got 0x2e006d Parcel: pos=3484 size=17768 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at com.google.android.gms.internal.aw.c(Unknown Source) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at com.google.android.gms.maps.model.LatLngCreator.createFromParcel(Unknown Source) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at com.google.android.gms.maps.model.LatLngCreator.createFromParcel(Unknown Source) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at android.os.Parcel.readTypedList(Parcel.java:1655) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at com.eloges.geoloc.Road.<init>(Road.java:66) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at com.eloges.geoloc.Road.<init>(Road.java:49) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at com.eloges.geoloc.Road$1.createFromParcel(Road.java:98) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at com.eloges.geoloc.Road$1.createFromParcel(Road.java:1) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at android.os.Parcel.readParcelable(Parcel.java:1997) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at android.os.Parcel.readValue(Parcel.java:1859) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at android.os.Parcel.readMapInternal(Parcel.java:2099) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at android.os.Bundle.unparcel(Bundle.java:223) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at android.os.Bundle.getParcelable(Bundle.java:1158) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at com.eloges.GeoPosActivity$2.onReceive(GeoPosActivity.java:162) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:781) 
03-14 14:34:12.431: E/AndroidRuntime(9809):  ... 9 more 

ответ

0

Используйте writeParcelableArray() для своих списков ArrayLists и убедитесь, что ваш объект LatLng и Step являются применимыми.

+0

Я попробовал writeParcelableArray() нет ошибки, но она не работает: в моей функции 'writeToParcel (Parcel, int) {[..] Log.d (« Read-writeToParcel, «in function»); [..] dest.writeParcelableArray ((Step []) etapes.toArray(), flags); Log. («Road-writeToParcel», «after wrtieParcelableArray etapes»); [..]} 'и моя трассировка стека:' 03-15 11: 15: 24.530: D/broadcast AS SENT (7417): ItineraireService 03-15 11: 15: 24.560: D/Road-writeToParcel (7417): в функции', поэтому у меня нет сообщение "после writeParcelableArray" Я попробовал этот 'dest.writeList (этапы);' но ошибки появляются в моей трассе стека ...: S – bzhWarrior