андроид:проблема с сериализуемым объектом, введенным в действие
-
20-09-2019 - |
Вопрос
Привет, у меня есть проблемы с классом, который я хочу пройти в намерениях, поместив его в Putextras () его сериализуемо, а код выглядит так:
public abstract class ObjectA extends ArrayList<ObjectA> implements java.io.Serializable{...}
public class ObjectB extends ObjectA {...}
...
Bundle extras = new Bundle();
extras.putSerializable("blabla", ObjectB);
intent.putExtras(extras);
...
Object y = getIntent().getExtras().get("blabla");
проблема в том, что y теперь является ArrayList, а не ObjectB, поэтому я не могу его привести.если я изменю код на
public class ObjectB implements java.io.Serializable {...}
это работает нормально
Решение
Реализовав в своем классе как java.util.List, так и java.io.Serializable, вы запустили это ошибка андроида.
Другие советы
Я подозреваю, что происходит следующее: поскольку вы не объявляете ObjectB сериализуемым, он «возвращается» к самому последнему родительскому объекту.Поэтому, когда вы помещаете его в Bundle, вы на самом деле не добавляете ObjectB, а возвращает ObjectB обратно в ArrayList.
Я думаю, вам придется использовать второй («работает нормально») код.
Как вы объявляете ObjectB перед передачей его в пакет?Насколько я понимаю ваш вопрос, вы не получаете ошибки при передаче пакета, а только при его удалении.Попробуйте получить ObjectB в тип ObjectB следующим образом:
ObjectB y = (ObjectB) getIntent().getExtras().get("blabla");
А ObjectA
в ArrayList
должен реализовать интерфейс Parcelable
.После этого вы можете поместить свои массивы в намерение и получить их в другом действии.