Как вы отправляете массив пользовательских объектов между действиями?

Я нашел много мест, где они отправляют ArrayList, но мне нужно отправить простой массив моего пользовательского объекта «Карточка» из действия A в B. Я верю, что я сделал классы таким образом, чтобы мой объект мог Быть переданным как дополнительный от намерения. Это моя классная плата класса:

import android.os.Parcel; import android.os.Parcelable; public class Card implements Parcelable{ public String suit; public int value; public String color; public Card(String suit, int value){ this.suit = suit; this.value = value; if(suit == "hearts" || suit == "diamonds"){ this.color = "red"; }else{ this.color = "black"; } } public String toString(){ String s = suit; return s; } private Card(Parcel in) { value = in.readInt(); color = in.readString(); suit = in.readString(); } public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeInt(value); out.writeString(color); out.writeString(suit); } public static final Parcelable.Creator<Card> CREATOR = new Parcelable.Creator<Card>() { public Card createFromParcel(Parcel in) { return new Card(in); } public Card[] newArray(int size) { return new Card[size]; } }; } 

И вот как я добавляю его к намерению в деятельности A (ei основной деятельности):

  Card[] myCardArray = new Card[7]; //Note the card array is filled before starting the intent. Intent intnt = new Intent(this, B.class); intnt.putExtra("array", myCardArray); startActivity(intnt); 

Затем я возвращаю его в метод onCreate Activity B так:

  allCards = (Card[]) getIntent().getExtras().getParcelableArray("array"); 

Unourntunatley приложение рушится, как только он достигает кода в Activity B. Я называю это неправильным способом? Вот логарифм

 09-05 15:27:37.007: E/Trace(26971): error opening trace file: No such file or directory (2) 09-05 15:27:37.007: D/ActivityThread(26971): setTargetHeapUtilization:0.25 09-05 15:27:37.007: D/ActivityThread(26971): setTargetHeapIdealFree:8388608 09-05 15:27:37.007: D/ActivityThread(26971): setTargetHeapConcurrentStart:2097152 09-05 15:27:37.228: D/libEGL(26971): loaded /system/lib/egl/libEGL_adreno200.so 09-05 15:27:37.228: D/libEGL(26971): loaded /system/lib/egl/libGLESv1_CM_adreno200.so 09-05 15:27:37.228: D/libEGL(26971): loaded /system/lib/egl/libGLESv2_adreno200.so 09-05 15:27:37.248: I/Adreno200-EGLSUB(26971): <ConfigWindowMatch:2087>: Format RGBA_8888. 09-05 15:27:37.268: E/(26971): <s3dReadConfigFile:75>: Can't open file for reading 09-05 15:27:37.268: E/(26971): <s3dReadConfigFile:75>: Can't open file for reading 09-05 15:27:37.268: D/OpenGLRenderer(26971): Enabling debug mode 0 09-05 15:27:39.640: I/Adreno200-EGLSUB(26971): <ConfigWindowMatch:2087>: Format RGBA_8888. 09-05 15:27:41.963: I/Adreno200-EGLSUB(26971): <ConfigWindowMatch:2087>: Format RGBA_8888. 09-05 15:27:42.844: I/Adreno200-EGLSUB(26971): <ConfigWindowMatch:2087>: Format RGBA_8888. 09-05 15:27:44.425: I/Adreno200-EGLSUB(26971): <ConfigWindowMatch:2087>: Format RGBA_8888. 09-05 15:27:46.257: I/Adreno200-EGLSUB(26971): <ConfigWindowMatch:2087>: Format RGBA_8888. 09-05 15:27:47.799: I/Adreno200-EGLSUB(26971): <ConfigWindowMatch:2087>: Format RGBA_8888. 09-05 15:27:49.781: I/Adreno200-EGLSUB(26971): <ConfigWindowMatch:2087>: Format RGBA_8888. 09-05 15:27:51.182: I/Adreno200-EGLSUB(26971): <ConfigWindowMatch:2087>: Format RGBA_8888. 09-05 15:27:51.943: I/Adreno200-EGLSUB(26971): <ConfigWindowMatch:2087>: Format RGBA_8888. 09-05 15:27:55.237: I/Adreno200-EGLSUB(26971): <ConfigWindowMatch:2087>: Format RGBA_8888. 09-05 15:27:56.468: I/Adreno200-EGLSUB(26971): <ConfigWindowMatch:2087>: Format RGBA_8888. 09-05 15:27:57.910: I/Adreno200-EGLSUB(26971): <ConfigWindowMatch:2087>: Format RGBA_8888. 09-05 15:27:59.101: D/AndroidRuntime(26971): Shutting down VM 09-05 15:27:59.101: W/dalvikvm(26971): threadid=1: thread exiting with uncaught exception (group=0x412e8438) 09-05 15:27:59.111: E/AndroidRuntime(26971): FATAL EXCEPTION: main 09-05 15:27:59.111: E/AndroidRuntime(26971): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.marco.pokerhands2/com.marco.pokerhands2.DisplayHands}: java.lang.ClassCastException: android.os.Parcelable[] cannot be cast to com.marco.pokerhands2.Card[] 09-05 15:27:59.111: E/AndroidRuntime(26971): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2088) 09-05 15:27:59.111: E/AndroidRuntime(26971): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2113) 09-05 15:27:59.111: E/AndroidRuntime(26971): at android.app.ActivityThread.access$700(ActivityThread.java:139) 09-05 15:27:59.111: E/AndroidRuntime(26971): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1224) 09-05 15:27:59.111: E/AndroidRuntime(26971): at android.os.Handler.dispatchMessage(Handler.java:99) 09-05 15:27:59.111: E/AndroidRuntime(26971): at android.os.Looper.loop(Looper.java:137) 09-05 15:27:59.111: E/AndroidRuntime(26971): at android.app.ActivityThread.main(ActivityThread.java:4918) 09-05 15:27:59.111: E/AndroidRuntime(26971): at java.lang.reflect.Method.invokeNative(Native Method) 09-05 15:27:59.111: E/AndroidRuntime(26971): at java.lang.reflect.Method.invoke(Method.java:511) 09-05 15:27:59.111: E/AndroidRuntime(26971): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004) 09-05 15:27:59.111: E/AndroidRuntime(26971): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771) 09-05 15:27:59.111: E/AndroidRuntime(26971): at dalvik.system.NativeStart.main(Native Method) 09-05 15:27:59.111: E/AndroidRuntime(26971): Caused by: java.lang.ClassCastException: android.os.Parcelable[] cannot be cast to com.marco.pokerhands2.Card[] 09-05 15:27:59.111: E/AndroidRuntime(26971): at com.marco.pokerhands2.DisplayHands.onCreate(DisplayHands.java:30) 09-05 15:27:59.111: E/AndroidRuntime(26971): at android.app.Activity.performCreate(Activity.java:5048) 09-05 15:27:59.111: E/AndroidRuntime(26971): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 09-05 15:27:59.111: E/AndroidRuntime(26971): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2052) 09-05 15:27:59.111: E/AndroidRuntime(26971): ... 11 more 

Solutions Collecting From Web of "Как вы отправляете массив пользовательских объектов между действиями?"

Вы не можете использовать такие массивы. Если у вас есть массив Parcelable и вы хотите Parcelable его в массив Card , вам необходимо пройти через массив и отбросить каждый объект отдельно:

 Parcelable[] allParcelables = getIntent().getExtras().getParcelableArray("array"); Card[] allCards = new Card[allParcelables.length]; for (int i = 0 ; i < allParcelables.length; i++) { allCards[i] = (Card)allParcelables[i]; }