任何对象都可以被Intent交换,只要它们是可序列化的或可分区的。 但protobuf对象不实现Serializable或Parceable。 由于protobuf对象的实现可能在将来发生变化,因此不建议修改/扩展它们。 如何通过Intent协议缓冲区生成类交换?
编辑:我使用的是protobuf-2.3.0,其中GeneratedMessage和GeneratedMessageLite没有实现Serializable。生成的消息于2010年11月2日开始实施Serializable。Protobuf-2.4.1于2011年4月发布。
答案 0 :(得分:3)
以下答案在2011年属实,但GeneratedMessageLite
不再实施Serializable
。 GeneratedMessage
仍然可以。
GeneratedMessage
和GeneratedMessageLite
都实现了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
。