我对协议缓冲区主题非常陌生.
但我知道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());
总结 以上是内存溢出为你收集整理的Android Http请求和响应使用协议缓冲区全部内容,希望文章能够帮你解决Android Http请求和响应使用协议缓冲区所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)