我在Android中尝试使用Protobuf,我有点卡住了。我试图创建一条消息,但我得到了com.google.protobuf.UninitializedMessageException: Message missing required fields
。但是,isInitialized()
返回true,我只使用可选&重复的领域。
我确定我错过了什么。有什么想法吗?
这是我的原型文件:
package mobile_app;
message Msg {
enum Command {
LOGIN = 0;
LOGOUT = 1;
}
message Param {
optional int32 param_id = 1;
repeated string items = 2;
}
enum ErrorCode {
LOGIN_OK = 0;
LOGIN_FAILED = 1;
UNKNOWN_PARAM_ID = 2;
}
optional Command command = 1;
optional int32 param_id = 2;
optional ErrorCode error_code = 3;
optional string username = 4;
optional string password = 5;
repeated Param params = 6;
}
我的代码:
// ...
Messages.Msg.Builder loginMessage = Messages.Msg.newBuilder();
loginMessage.setCommand(Messages.Msg.Command.LOGIN)
.setUsername(username)
.setPassword(password);
boolean isOk = loginMessage.isInitialized(); // returns true
Messages.Msg m = loginMessage.build(); // throws exception
// ...
我在纯Java应用程序上尝试了代码,它运行得很好。所以它似乎是一个特定于Android的问题。