通过 Android Intent 传递协议缓冲区对象

发布于 2024-12-10 12:02:06 字数 810 浏览 0 评论 0原文

任何可序列化可解析对象都可以通过Intent进行交换。 但 protobuf 对象不实现 Serialized 或 Parceable。 由于 protobuf 对象的实现将来可能会发生变化,因此不建议修改/扩展它们。

如何通过Android Intent协议缓冲区消息(生成的类)交换数据?

编辑:我使用的是protobuf-2.3.0,其中GenerateMessageGeneeratedMessageLite 不实现 Serialized。生成的消息于 2010 年 11 月 2 日开始实现序列化。Protobuf-2.4.1于 2011 年 4 月发布。

Any Serializable or Parceable objects can be exchanged by Intent.
But protobuf objects do not implement Serializable or Parceable.
Since protobuf objects implementation may change in the future, it's not advised to modify/extend them.

How to exchange by Android Intent data from protocol buffer message (generated class) ?

EDIT : I was using protobuf-2.3.0 where GeneratedMessage and GeneratedMessageLite don't implement Serializable. Generated messages started to implement Serializable on 2 November 2010. Protobuf-2.4.1 was released on April 2011.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

娇俏 2024-12-17 12:02:06

以下答案在 2011 年是正确的,但 GeneeratedMessageLite 不再实现 SerializedGenerateMessage 仍然如此。

GenerateMessageGenerateMessageLite 都实现了 Serializable,因此据我所知,您应该能够序列化任何特定的生成消息类 意识到的。您是否尝试过仅序列化 Message

The following answer was true in 2011, but GeneratedMessageLite no longer implements Serializable. GeneratedMessage still does.

GeneratedMessage and GeneratedMessageLite both implement Serializable, so you should be able to just serialize any specific generated message class as far as I'm aware. Were you trying to serialize just Message by any chance?

机场等船 2024-12-17 12:02:06

目前,在 Java-lite 中(目前推荐用于 Android)执行此操作的最佳方法是将对象转换为 ByteArray 然后将其发送到 Activity 并将字节数组转换回目标 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 一起使用在 Activity 之间发送对象。然而,Java-nano 已不再存在,并且 GeneeratedMessageLite 不实现 SerializableParcelable

For now probably the best way to do this in Java-lite (currently recommended for Android) is convert the object to ByteArray and then send it to the Activity and convert the byte Array back to the object in the target 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 used to implement Parcelable which could be used with Android Parcelable to send objects between Activities. However Java-nano is no longer, and GeneratedMessageLite doesn't implement either Serializable or Parcelable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文