2012-12-14 18 views
2

額外的我需要一個自定義的Parcelable對象傳遞給作爲額外的另一個活動的RuntimeException當我試圖得到一個對象從意向

我把多餘的這段代碼

Car myCarObject=getCar(); 
ArrayList<Car> parcelableExtra = new ArrayList<Car>(); 
       parcelableExtra.add(myCarObject); 

Intent details = new Intent(Start.this, DetailsCar.class); 
       details.putExtra("Car", parcelableExtra); 
       startActivity(details); 

我嘗試加載額外的與此代碼的目的意圖

ArrayList<Car> parcelableExtra = new ArrayList<Car>(); 
     parcelableExtra = (ArrayList<Car>) getIntent().getExtras().getParcelable("Car"); 
     Car c=parcelableExtra.get(0); 

但與此錯誤堆棧的應用程序崩潰:

12-14 03:34:24.059: E/AndroidRuntime(16872): FATAL EXCEPTION: main 
12-14 03:34:24.059: E/AndroidRuntime(16872): java.lang.RuntimeException: Unable to start activity ComponentInfo{my.app.com/my.app.com.DetailsCar}: java.lang.RuntimeException: Parcel [email protected]: Unmarshalling unknown type code 5505097 at offset 3144 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.os.Looper.loop(Looper.java:130) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.app.ActivityThread.main(ActivityThread.java:3687) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at java.lang.reflect.Method.invokeNative(Native Method) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at java.lang.reflect.Method.invoke(Method.java:507) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at dalvik.system.NativeStart.main(Native Method) 
12-14 03:34:24.059: E/AndroidRuntime(16872): Caused by: java.lang.RuntimeException: Parcel [email protected]: Unmarshalling unknown type code 5505097 at offset 3144 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.os.Parcel.readValue(Parcel.java:1913) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.os.Parcel.readListInternal(Parcel.java:2092) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.os.Parcel.readArrayList(Parcel.java:1536) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at my.app.com.obj.Car.<init>(Car.java:361) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at my.app.com.obj.Car.<init>(Car.java:347) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at my.app.com.obj.Car$1.createFromParcel(Car.java:339) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at my.app.com.obj.Car$1.createFromParcel(Car.java:1) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.os.Parcel.readParcelable(Parcel.java:1981) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.os.Parcel.readValue(Parcel.java:1846) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.os.Parcel.readListInternal(Parcel.java:2092) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.os.Parcel.readArrayList(Parcel.java:1536) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.os.Parcel.readValue(Parcel.java:1867) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.os.Parcel.readMapInternal(Parcel.java:2083) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.os.Bundle.unparcel(Bundle.java:208) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.os.Bundle.getParcelable(Bundle.java:1100) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at my.app.com.DetailsCar.onCreate(DetailsCar.java:43) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
12-14 03:34:24.059: E/AndroidRuntime(16872): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
12-14 03:34:24.059: E/AndroidRuntime(16872): ... 11 more 

我Parcelable Car對象是這個

public class Car implements Serializable, Parcelable { 
    String description; 
    String speed; 
    String brake; 
    String pro; 

    public Car(String description, String speed, String brake, 
      String pro) { 
     super(); 
     this.description = description; 
     this.speed = speed; 
     this.brake = brake; 
     this.pro = pro; 
    } 

    public Car() { 

    } 

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

    @Override 
    public void writeToParcel(Parcel arg0, int arg1) { 
     arg0.writeString(description); 
     arg0.writeString(speed); 
     arg0.writeString(brake); 
     arg0.writeString(pro); 
    } 

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

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

    private Car(Parcel in) { 
     description = in.readString(); 
     speed = in.readString(); 
     brake = in.readString(); 
     pro = in.readString(); 
     in.readArrayList(String.class.getClassLoader()); 
    } 

} 

我該如何解決這個問題? 有什麼建議嗎?

+0

在我的.app.com.obj.Car。 (Car.java:361)'對應? – PearsonArtPhoto

+0

對應於in.readArrayList(String.class.getClassLoader());在車對象 – AndreaF

回答

2

讓我們來看看兩個關鍵功能:

@Override 
public void writeToParcel(Parcel arg0, int arg1) { 
    arg0.writeString(description); 
    arg0.writeString(speed); 
    arg0.writeString(brake); 
    arg0.writeString(pro); 
} 


private Car(Parcel in) { 
    description = in.readString(); 
    speed = in.readString(); 
    brake = in.readString(); 
    pro = in.readString(); 
    in.readArrayList(String.class.getClassLoader()); 
} 

注意,首先寫入4個變量的Parcel,以及後來讀5.系統崩潰,因爲沒有在包裹一個ArrayList。放入一個arrayList,你應該沒問題。或者,你可以刪除閱讀功能,因爲它甚至不會被使用(但是我會考慮到你的功能中可能包含的功能超過了你的功能)

+0

什麼ArrayList?我必須把ArrayList放在整個對象類中?你能給我一個樣本嗎?謝謝 – AndreaF

+0

如果您不使用ArrayList,那麼只需刪除最後一行。它試圖讀取那些不存在的內容......如果你打算保存一個字符串數組,只保留行,否則它只會導致你悲傷。 – PearsonArtPhoto

+0

如果我只是刪除最後一行獲取另一個空指針異常的運行時異常 – AndreaF

相關問題