Android: проблема с сериализуемым объектом введена в намерение - PullRequest
5 голосов
/ 10 октября 2009

Привет, у меня проблема с классом, который я хочу передать намерением, поместив его в 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 {...}

отлично работает

Ответы [ 4 ]

14 голосов
/ 16 ноября 2009

Реализуя java.util.List и java.io.Serializable в своем классе, вы вызвали эту ошибку для Android .

0 голосов
/ 12 декабря 2009

ObjectA в ArrayList должен реализовывать интерфейс Parcelable. После этого вы можете поместить своих arraylists в намерение, и получить их в другой деятельности.

0 голосов
/ 20 октября 2009

Как вы объявляете ObjectB перед тем, как передать его в пакет? Из того, что я понимаю по вашему вопросу, вы не получаете ошибки при передаче в комплекте, только при его удалении. Попробуйте получить объект ObjectB прямо в тип ObjectB, например так:

ObjectB y = (ObjectB) getIntent().getExtras().get("blabla");
0 голосов
/ 13 октября 2009

Я подозреваю, что происходит то, что, поскольку вы не объявляете ObjectB как сериализуемый, он «отступает» к самому последнему родительскому объекту. Поэтому, когда вы помещаете его в Bundle, вы фактически не вставляете ObjectB, а возвращаете ObjectB к ArrayList.

Я думаю, вам придется пойти со вторым ("отлично работает") кодом.

...