我嘗試使用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
WHE re是你把這個'CycleItems'放到'Bundle'中的嗎?它看起來像一個類名,但是你將它用作變量,並且你沒有顯示它的定義位置。我也看到你的命名錶明你正在進行某種收集,但隨後嘗試提取單個項目。 – chrylis
不,這是我的對象,我編輯我的帖子,請再次看到 –
也許嘗試在發送時使用不同的標識符作爲parcelable和extra。 – Szymon