其他分享
首页 > 其他分享> > Android Http请求和响应使用协议缓冲区

Android Http请求和响应使用协议缓冲区

作者:互联网

我对协议缓冲区主题非常陌生.
但我知道json解析等等
现在,我实际上正在此协议缓冲区上工作,我正在制作一个使用带有协议缓冲区的android进行Http请求和响应的应用程序.

我正在使用android中的协议缓冲区制作一个登录页面.

服务中的一切正常工作墙返回了我想要的每个字段的响应,但是
服务提供给我的信息与服务器发出的响应不同.

我具有有关.proto文件的协议缓冲区的基本知识以及用于从proto编译Java文件的工具,并且也完成了所有连接,我只需要响应或如何序列化和反序列化响应消息.

**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响应视为文本.协议缓冲区是二进制序列化格式.如果将二进制数据转换为String,或者尝试使用Reader读取它,则数据将被破坏.

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

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

标签:protocol-buffers,android
来源: https://codeday.me/bug/20191030/1965952.html