Protobuf:抛出UninitializedMessageException,但isInitialized()返回true

时间:2016-06-29 09:53:02

标签: java android protocol-buffers

我在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的问题。

0 个答案:

没有答案