List‹String› readStringArray в Parcelable

Большая часть моего Parcelable работает; Простые вещи, такие как out.writeString, out.writeInt, in.readString() и т. д., работают отлично.

Моя проблема заключается в том, что я хочу упаковать массив / список / ArrayList (я пробовал их все).

В настоящее время я пытаюсь:

List<String>

и

out.writeStringList()

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

Eclipse предполагает, что существует

in.readStringList(List<String> list)

чтобы прочитать эти данные обратно. Но это не для меня.

Что мы должны поместить в ()?

Я ничего не пробовал, с результатом «Добавить аргумент для соответствия...». Я пробовал null, ссылку на геттер среди прочего; которые все возвращают ошибку «невозможно преобразовать из void в список»


person DaveSav    schedule 23.02.2012    source источник


Ответы (2)


«невозможно преобразовать из void в список»

Судя по этой ошибке, вы пытаетесь присвоить тип возвращаемого значения метода readStringList(...) переменной List<T>. Другими словами: возможно, вы пишете что-то вроде:

List<String> stringList = in.readStringList(stringList)

? readStringList(...) возвращает пустоту, поэтому Eclipse может жаловаться на это. На самом деле вам не следует не пытаться получить тип возвращаемого значения из метода void — в этом случае вам нужно указать переменную, которой должен быть назначен результат, в качестве параметра. Следовательно, этого должно быть достаточно:

List<String> stringList = null;
in.readStringList(stringList)

Кстати, если вы реализуете Parcelable, чтобы иметь возможность передавать относительно простые объекты данных между действиями (используя намерения), рассмотрите возможность использования интерфейса Serializable вместо этого — это сэкономит вам массу работы, особенно если вам нужно повторите тот же процесс для нескольких объектов.

person MH.    schedule 23.02.2012
comment
Вот и все, спасибо. В отличие от String или Integer, где вы должны написать x=in.readString(), вы меняете его местами, чтобы он был in.readStringList(x), где x — это ранее созданный вами List‹String›. Я знаю, что Parcelable требует больше усилий для настройки, но из того, что я читал о нем, его производительность превосходит Serializable. Еще раз спасибо. - person DaveSav; 24.02.2012
comment
HOUSEKEEPING: Это работало, затем я «почистил свой код», и оно остановилось. Если вы тоже в тупике; ответ с кодом находится по адресу idlesun.wordpress.com/2011/07/15/ - person DaveSav; 25.02.2012

Пишите в посылку:

out.writeStringList(yourStringList);

Читать из посылки

List<String> newList = in.createStringArrayList();
person Vitaly Zinchenko    schedule 26.09.2015