Intereting Posts
Как заблокировать ориентацию приложения Android в портретном режиме? Как я могу вернуться обратно в свою активность из окна настроек GPS AlertDialog с пользовательским представлением: изменить размер, чтобы обернуть содержимое представления Как использовать несколько TouchDelegate Программно фиксировать в портретном режиме для определенных операций Повторная инициализация ткани Twitter после долгого приложения для Android в режиме бездействия Ошибка: ресурс не найден, который соответствует указанному имени: attr 'typeface' Как отлаживать плагин cordova и вести журнал с помощью "android.util.log" Загрузите плотность для уровня API <15 Android studio 2.3: Не удалось инициализировать класс org.jetbrains.kotlin.android.actions.NewKotlinActivityAction Android: открытая активность без сохранения в стеке Как изменить цвет переносимого вектора пути при нажатии кнопки Будет ли JavaFX работать на Android? Шаблон обновления прокрутки Android Swipe up up, чтобы обновить Размер экрана устройства Android

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

Я нашел много мест, где они отправляют 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]; }