передать объект буфера протокола с помощью намерения Android - PullRequest
1 голос
/ 17 октября 2011

Любые объекты могут быть заменены Intent, если они являются сериализуемыми или разборчивыми.Но объекты protobuf не реализуют Serializable или Parceable.Поскольку реализация объектов protobuf может измениться в будущем, не рекомендуется изменять / расширять их.Как вы можете обмениваться сгенерированным классом Intent-буферов протокола?

EDIT: я использовал protobuf-2.3.0, где GeneratedMessage и GeneratedMessageLite не поддерживают Serializable.Сгенерированные сообщения начали внедрять Serializable 2 ноября 2010 года. Protobuf-2.4.1 был выпущен в апреле 2011 года.

Ответы [ 2 ]

3 голосов
/ 17 октября 2011

Следующий ответ был верным в 2011 году, но GeneratedMessageLite больше не реализует Serializable. GeneratedMessage все еще делает.

GeneratedMessage и GeneratedMessageLite оба реализуют Serializable, поэтому вы должны иметь возможность просто сериализовать любой конкретный сгенерированный класс сообщений до Я знаю. Вы случайно не пытались сериализовать Message? 1016 *

1 голос
/ 03 февраля 2019

На данный момент, вероятно, лучший способ сделать это в Java-lite (в настоящее время рекомендуется для Android) - преобразовать объект в ByteArray , а затем отправить его в Activity и преобразовать байтовый массив обратно в объект.в целевой операции.

// convert to byte array and pass to intent

Intent listResults = new Intent(activity, ImageResults.class);

listResults.putExtra( "reply", reply.toByteArray());


// Convert byte array to Object
 result_list = (Search.SearchResponse) Search.SearchResponse.parseFrom(getIntent().getByteArrayExtra("reply"));

Java-nano используется для реализации Parcelable, который можно использовать с Android Parcelable для отправки объектов между операциями.Однако Java-nano больше не существует, и GeneratedMessageLite не реализует Serializable или Parcelable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...