2013-12-22 35 views
1

我嘗試使用Intent發送一個對象。將對象發送到其他活動時發生異常類型

我有三個班,A班有一個班級B的列表,B班有一個班級C的列表,我想從一個活動發送班級A到另一個班級 Parcelable。 我嘗試以下代碼:

在A類:

在B類
private List<DocumentItem> documentItems; 
private int DocNum ; 

    public CycleAccount(Parcel in) { 
    DocNum = in.readInt(); 
    documentItems = new ArrayList<DocumentItem>(); 
    in.readList(documentItems , null); 
} 

@Override 
public int describeContents() { 
    return 0; 
} 
@Override 
public void writeToParcel(Parcel dest, int flags) { 

    dest.writeInt(DocNum); 
    dest.writeList(documentItems); 


} 

public CycleAccount(Parcel in) { 
    DocNum = in.readInt(); 
    documentItems = new ArrayList<DocumentItem>(); 
    in.readList(documentItems , null); 
} 

private String LedgerAcountId; 
private String Title; 
private String Debit; 
private String Credit; 
private String Description; 
private List<DetailsAccount> DetailAccount; 


public DocumentItem(Parcel in) { 
    LedgerAcountId = in.readString(); 
    Title = in.readString(); 
    Debit = in.readString(); 
    Credit = in.readString(); 
    Description = in.readString(); 

    DetailAccount = new ArrayList<DetailsAccount>(); 
    in.readList(DetailAccount, null); 


} 

@Override 
public int describeContents() { 

    return 0; 
} 
@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(LedgerAcountId); 
    dest.writeString(Title); 
    dest.writeString(Debit); 
    dest.writeString(Credit); 
    dest.writeString(Description); 
    dest.writeList(DetailAccount); 

} 

,並在類C:

private String Title; 
private String Level; 
private String detailAccountId; 


DetailsAccount(Parcel in) 
{ 
    Title = in.readString(); 
    Level = in.readString(); 
    detailAccountId = in.readString(); 
} 

@Override 
public int describeContents() { 

    return 0; 
} 
@Override 
public void writeToParcel(Parcel dest, int flags) { 

    dest.writeString(Title); 
    dest.writeString(Level); 
    dest.writeString(detailAccountId); 
} 

和用於發送和獲取數據我使用以下代碼:

發送:

Intent intent = new Intent(AccountReviewActivity.this, CycleAccountAccountReview.class); 
Bundle bundle = new Bundle(); 
bundle.putParcelable("data", CycleItems); 
intent.putExtra("data",bundle); 
startActivity(intent); 

獲取:

cycleItem = new CycleAccount(); 
Bundle bundle = getIntent().getExtras(); 
cycleItem = bundle.getParcelable("data"); 

,我得到以下錯誤:

12-22 10:13:57.320: E/AndroidRuntime(3702): FATAL EXCEPTION: main 
12-22 10:13:57.320: E/AndroidRuntime(3702): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.proj.finantial/activity.CycleAccountAccountReview}: java.lang.ClassCastException: android.os.Bundle cannot be cast to classes.CycleAccount 
12-22 10:13:57.320: E/AndroidRuntime(3702):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
12-22 10:13:57.320: E/AndroidRuntime(3702):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
12-22 10:13:57.320: E/AndroidRuntime(3702):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
12-22 10:13:57.320: E/AndroidRuntime(3702):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
12-22 10:13:57.320: E/AndroidRuntime(3702):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-22 10:13:57.320: E/AndroidRuntime(3702):  at android.os.Looper.loop(Looper.java:137) 
12-22 10:13:57.320: E/AndroidRuntime(3702):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
12-22 10:13:57.320: E/AndroidRuntime(3702):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-22 10:13:57.320: E/AndroidRuntime(3702):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-22 10:13:57.320: E/AndroidRuntime(3702):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
12-22 10:13:57.320: E/AndroidRuntime(3702):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
12-22 10:13:57.320: E/AndroidRuntime(3702):  at dalvik.system.NativeStart.main(Native Method) 
12-22 10:13:57.320: E/AndroidRuntime(3702): Caused by: java.lang.ClassCastException: android.os.Bundle cannot be cast to classes.CycleAccount 
12-22 10:13:57.320: E/AndroidRuntime(3702):  at activity.CycleAccountAccountReview.onCreate(CycleAccountAccountReview.java:77) 
12-22 10:13:57.320: E/AndroidRuntime(3702):  at android.app.Activity.performCreate(Activity.java:5104) 
12-22 10:13:57.320: E/AndroidRuntime(3702):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
12-22 10:13:57.320: E/AndroidRuntime(3702):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
12-22 10:13:57.320: E/AndroidRuntime(3702):  ... 11 more 

什麼想法?

編輯

CycleItems = new CycleAccount(); 
documentItemResponse = JsonAcountReview.getAccountItem(params[0] ,params[1],params[2],params[3],params[4],params[5]); 
CycleItems = JsonAcountReview.AccountItem(documentItemResponse); 

我從Json

+1

WHE re是你把這個'CycleItems'放到'Bundle'中的嗎?它看起來像一個類名,但是你將它用作變量,並且你沒有顯示它的定義位置。我也看到你的命名錶明你正在進行某種收集,但隨後嘗試提取單個項目。 – chrylis

+0

不,這是我的對象,我編輯我的帖子,請再次看到 –

+0

也許嘗試在發送時使用不同的標識符作爲parcelable和extra。 – Szymon

回答

1

數據試試這個...

Intent intent = new Intent(AccountReviewActivity.this, CycleAccountAccountReview.class); 
intent.putExtra("data",cycleItems); 
startActivity(intent); 

並在收到活動

CycleAccount cycleItem = getIntent().getParcelableExtra("data"); 
+0

'解組時未找到類:classes.DocumentItem,e:java.lang.ClassNotFoundException:classes.DocumentItem' –

+0

定義了一個空參數(默認)DocumentItem的構造函數和一次清理項目... –

+0

我有那個構造函數,我清理了項目但沒有不同,相同的錯誤 –

相關問題