通过一个Android意图传递协议缓冲区对象

问题描述 投票:1回答:2

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

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

android protocol-buffers
2个回答
3
投票

以下的答案必须在2011年是真实的,但GeneratedMessageLite不再实行SerializableGeneratedMessage仍然如此。

GeneratedMessageGeneratedMessageLite都实现Serializable,所以你应该能够公正系列化任何具体产生的消息类,据我所知。是你想要的任何机会只是Message序列化?


1
投票

现在大概在Java的精简版(目前推荐用于Android系统)来做到这一点的最好办法是将对象转换到ByteArray,然后将其发送到活动并转换成字节数组回对象在目标活动。

// 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的纳米用来实现Parcelable这可能与Android Parcelable被用来发送活动之间的物体。但是Java的纳米不再,而GeneratedMessageLite没有实现任何SerializableParcelable

© www.soinside.com 2019 - 2024. All rights reserved.