我对 Protocol Buffer 主题很陌生。
但我知道 json 解析和所有这些
现在我实际上正在研究这个 Protocol Buffer ,我正在制作一个应用程序,它使用带有 Protocol Buffer 的 android 请求和响应。

我正在使用 android 中的 Protocol Buffer 制作一个登录页面。

来自服务的一切都在工作墙返回我想要的每个字段的响应但是
服务给我的信息与实际来自服务器的响应不同。

我有关于 .proto 文件和用于从 proto 编译 java 文件的工具的 Protocol Buffer 的基本知识,并且所有连接也已完成,我只需要响应或如何序列化和反序列化响应消息。

**AuthenticateUserRequest.Builder abr = AuthenticateUserRequest
                    .newBuilder();
            abr.setUserID(p_UserName);
            abr.setPassword(p_Password);

            URL url = new URL(
                    "http://10.0.2.2:49847/Services");

            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            // ResCode = conn.getResponseCode();
            // URLConnection conn = url.openConnection();

            conn.setRequestProperty("content-type", "application/x-protobuf");
            conn.setDoOutput(true);

            OutputStream os = conn.getOutputStream();
            abr.build().writeTo(os);
            os.flush();
            os.close();

            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    conn.getInputStream()));
            StringBuilder sb = new StringBuilder();
            String line = null;

            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }

            byte[] result = String.valueOf(sb).getBytes();
            AuthenticateUserResponse.parseFrom(result).toBuilder();**

这就是我的任何人的代码都可以帮助我解决这个问题。

提前致谢。

最佳答案

您的问题是您试图将编码的 protobuf 响应视为文本。 Protocol Buffers 是一种二进制序列化格式。如果您将二进制数据转换为 String ,或者您尝试使用 Reader 读取它,它将被损坏。

要解决此问题,请将代码的整个第二部分(从创建 BufferedReader 的行开始)替换为:

AuthenticateUserResponse response =
    AuthenticateUserResponse.parseFrom(conn.getInputStream());

关于Android Http 请求和响应使用 Protocol Buffer ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20047005/

10-11 22:30
查看更多