FATAL EXCEPTION: main при попытке прочитать Extras Intent'а

Имеется фрагмент со списком объектов. При нажатии на элемент списка формируется Intent и запускается startActivityForResult

Log.d(TAG, "onItemClick position: " + position);
Intent intent = new Intent(v.getContext(), MealDetailActivity.class);
intent.putExtra(ID_KEY, position);  //позиция в списке
intent.putExtra(MEALNAME,mMeals.get(position));  //Parcelable объект 
Log.d(TAG, String.valueOf(intent));
Log.d(TAG, String.valueOf(intent.getIntExtra(ID_KEY,0)));
Log.d(TAG, String.valueOf(intent.getExtras()));
startActivityForResult(intent, REQUEST_EDIT_TYPE);

В дебаг при этом пишется

onItemClick position: 1
Intent { cmp=com.seysen.hikingmealsforandroid/.MealDetailActivity (has extras) }
1
Bundle[{meal=Porridge, meal_id=1}]

Вроде бы сформировано все верно. Запускаемое Activity при создании в onCreate инициализирует шаблон и проверяет, а были ли ему переданы Extras

Bundle arguments = getIntent().getExtras();
    if (arguments!=null) {
        Log.d(TAG,"Has arguments " + String.valueOf(arguments));
        position = arguments.getInt(ID_KEY);
        Log.d(TAG,"Position = " + position);
    }

И дальше можно не продолжать, потому-что приложение вылетает. В дебаге при этом:

Meal Detail Created
Has arguments Bundle[mParcelledData.dataSize=648]

В логе при этом FATAL EXCEPTION: main и еще интересная информация Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@acfe48b8: Unmarshalling unknown type code 7274595 at offset 156 и ссылка на строку

position = arguments.getInt(ID_KEY);

При этом в приложении в другом фрагменте список с объектами другого класса с аналогичной реализацией передачи объекта в Activity работает отлично. Единственное отличие, что в работает это с более простым классом Parcelable объектов. А в случае, где не работает объекты класса содержат в себе другие объекты класса, реализующего интерфейс Parcelable


Ответы (1 шт):

Автор решения: seysen

Parcelable объект содержал вложенные Parcelable объекты. В методе writeToParcel для вложенных Parcelable объектов используется метод writeTypedList. Тогда как в конструкторе, используемом в createFromParcel, я использовал readTypedList, а надо было createTypedArrayList.

→ Ссылка