Intereting Posts
Как добавить новую колонку в базу данных SQLite для Android? Удалить приложение из последних приложений программно Триггер галактики S4 Инфракрасный датчик разработки приложений? Есть ли способ, которым приложение может проверить, разрешено ли ему получать уведомления? Как добавить информацию о профиле в ящик для Android-навигации? Тестирование ViewPager (и CursorLoader) с помощью Robolectric OnViewCreated – неправильное место для замены фрагмента? Как загрузить файлы (pdf, doc и т. Д.) В SDCard и открыть файл с помощью volley in android? «Андроид-24» требует компиляции JDK 1.8 или новее Синхронизация модели частичной базы данных с сервера на клиент Каков наиболее подходящий способ хранения пользовательских настроек в приложении Android Android Studio не признает мою Xiaomi Redmi Note 3 Android – Firebase jobdispatcher Android: Как создать каталог на SD-карте и скопировать файлы из / res / raw? Запуск приложений Android на аппаратном устройстве от Android Studio USB

При использовании пакета android, почему сериализованный стек десериализуется как ArrayList?

Сериализация:

Bundle activityArguments = new Bundle(); Stack<Class<? extends WizardStep>> wizardSteps = new Stack<Class<? extends WizardStep>>(); wizardSteps.push(CreateAlarmStep5View.class); wizardSteps.push(CreateAlarmStep4View.class); wizardSteps.push(CreateAlarmStep3View.class); wizardSteps.push(CreateAlarmStep2View.class); wizardSteps.push(CreateAlarmStep1View.class); activityArguments.putSerializable("WizardSteps", wizardSteps); 

десериализация:

 Stack<Class<? extends WizardStep>> wizardSteps = (Stack<Class<? extends WizardStep>>) getIntent().getExtras().getSerializable("WizardSteps"); 

Исключение:

12-20 23: 19: 45.698: E / AndroidRuntime (12145): вызвано: java.lang.ClassCastException: java.util.ArrayList не может быть добавлено в java.util.Stack

Solutions Collecting From Web of "При использовании пакета android, почему сериализованный стек десериализуется как ArrayList?"

Его известная ошибка . Я удивляюсь, что он все еще существует.

Используйте общий контейнер, например:

 public class SerializableHolder implements Serializable { private Serializable content; public Serializable get() { return content; } public SerializableHolder(Serializable content) { this.content = content; } } 

Если вы используете библиотеку GSON , конвертируйте Stack в String и используйте как одиночную String для Bundle без Serialize. Он должен работать.

Надеюсь, я не говорю ничего глупостей!

Stack не реализует Serializable, а скорее расширяет Serializable Vector что эквивалентно ArrayList

Я не знаю реального определения equivalent и того, насколько это возможно, но достаточно сказать, что первый суперкласс Stack, который является Serializable, является Vector.

Поскольку мы видим это исключение, то я, вероятно, предположил бы, что отбрасывание Serializable в ArrayList не должно вызывать это исключение. В противном случае я говорю глупости.

Просто отрисуйте сериализуемую информацию, полученную из пакета, в список, создайте новый стек и добавьте все элементы списка в стек:

 Serializable serializable = savedInstanceState.getSerializable("key"); List<Something> arrayList = (List<Something>) serializable; Stack<Something> stack = new Stack<Something>(); stack.addAll(arrayList); 

Зачем бросать в List, а не ArrayList, который вы спрашиваете? Потому что, если это исправлено в некоторых версиях Android, у вас снова не будет ClassCastException.