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

时间:2011-10-17 14:05:13

标签: android protocol-buffers

任何对象都可以被Intent交换,只要它们是可序列化的或可分区的。 但protobuf对象不实现Serializable或Parceable。 由于protobuf对象的实现可能在将来发生变化,因此不建议修改/扩展它们。 如何通过Intent协议缓冲区生成类交换?

编辑:我使用的是protobuf-2.3.0,其中GeneratedMessageGeneratedMessageLite没有实现Serializable。生成的消息于2010年11月2日开始实施Serializable。Protobuf-2.4.1于2011年4月发布。

2 个答案:

答案 0 :(得分:3)

以下答案在2011年属实,但GeneratedMessageLite不再实施SerializableGeneratedMessage仍然可以。

GeneratedMessageGeneratedMessageLite都实现了Serializable,因此,就我所知,能够序列化任何特定生成的消息类。您是否尝试仅凭Message序列化?

答案 1 :(得分:1)

目前,在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一起使用,以在Activity之间发送对象。但是Java-nano不再存在,并且GeneratedMessageLite既不实现Serializable也不实现Parcelable