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