httpClient封装——异步、回调、下载
2015-12-22 17:49
489 查看
安卓学习部分就暂时不更新了,因为现在工作中直接做安卓开发了,以后会陆续记录工作中遇到的问题。
言归正传,最近工作开发安卓应用,由于我对安卓还不太熟,就先负责和服务端网络通信。要求:异步、回调。
一般我们在Java做异步的时候,到是新开一个线程,然后把逻辑放到线程里去执行。但是安卓里有了封装更好的AsyncTask,而已还有回调方法,具体用法请百度,很详细。我的封装就是基于它来实现的。
我就是把它封装成一个统一的声明(原本的如果要用的话,基本都是要声明一个内部类,比较麻烦),然后可以自定义回调类和回调方法(基于反射)。本来没什么好说的,但是因为有个下载的需求,本来也很简单,给我,然后开始写文件。服务器端这个接口也是我自己写的,因为对java.lang.reflect.InvocationTargetException.说我反射调用方法的时候出错了。这里记录一下:
在用反射调用方法的时候,如果被调用的方法报错了,反射的这个地方就会报java.lang.reflect.InvocationTargetException.
这样就很难找到根本出错的原因。没办法, 我把文件写入那段代码移到了反射之前,终于看到了错误来源:Caused by: android.os.NetworkOnMainThreadException。
这里要感谢http://www.cnblogs.com/freexiaoyu/archive/2012/04/13/2445707.html 这个帖。原来造成这样的错误原因是代码不符合Android规范,如果把上面访问方式改为异步操作就不会出现在4.0上访问出现 android.os.NetworkOnMainThreadException异常。
最后在代码修改成 在文件的时候,单独放到一个AsyncTask里执行,文件完美下载!
附:在编写服务器端和客户端中遇到的问题记录
1、服务器端异常javax.ws.rs.NotAcceptableException: HTTP 406 Not Acceptable
服务端配置的时候,设置了@Produces(MediaType.APPLICATION_OCTET_STREAM)
@Consumes({MediaType.APPLICATION_JSON}),即接受application/json类型,返回“application/octet-stream”类型,如果客户端发送的类型或者接受的类型不对,那么就会报错。
2、客户端android.os.NetworkOnMainThreadException:我理解的是安卓不让耗时的操作(比如IO读写等)在主线程里进行,防止线程堵塞。
言归正传,最近工作开发安卓应用,由于我对安卓还不太熟,就先负责和服务端网络通信。要求:异步、回调。
一般我们在Java做异步的时候,到是新开一个线程,然后把逻辑放到线程里去执行。但是安卓里有了封装更好的AsyncTask,而已还有回调方法,具体用法请百度,很详细。我的封装就是基于它来实现的。
我就是把它封装成一个统一的声明(原本的如果要用的话,基本都是要声明一个内部类,比较麻烦),然后可以自定义回调类和回调方法(基于反射)。本来没什么好说的,但是因为有个下载的需求,本来也很简单,给我,然后开始写文件。服务器端这个接口也是我自己写的,因为对java.lang.reflect.InvocationTargetException.说我反射调用方法的时候出错了。这里记录一下:
在用反射调用方法的时候,如果被调用的方法报错了,反射的这个地方就会报java.lang.reflect.InvocationTargetException.
这样就很难找到根本出错的原因。没办法, 我把文件写入那段代码移到了反射之前,终于看到了错误来源:Caused by: android.os.NetworkOnMainThreadException。
这里要感谢http://www.cnblogs.com/freexiaoyu/archive/2012/04/13/2445707.html 这个帖。原来造成这样的错误原因是代码不符合Android规范,如果把上面访问方式改为异步操作就不会出现在4.0上访问出现 android.os.NetworkOnMainThreadException异常。
最后在代码修改成 在文件的时候,单独放到一个AsyncTask里执行,文件完美下载!
附:在编写服务器端和客户端中遇到的问题记录
1、服务器端异常javax.ws.rs.NotAcceptableException: HTTP 406 Not Acceptable
服务端配置的时候,设置了@Produces(MediaType.APPLICATION_OCTET_STREAM)
@Consumes({MediaType.APPLICATION_JSON}),即接受application/json类型,返回“application/octet-stream”类型,如果客户端发送的类型或者接受的类型不对,那么就会报错。
2、客户端android.os.NetworkOnMainThreadException:我理解的是安卓不让耗时的操作(比如IO读写等)在主线程里进行,防止线程堵塞。
相关文章推荐
- delphi使用IdHTTP模拟提交页面方法总结
- android-async-http
- 深度学习、卷积神经网络的一些文章和牛人
- 利用TCP/IP 参考模型 分析数据传输过程
- network: Android 网络推断(wifi、3G与其它)
- java创建http接口
- HTTP参数CONNETCTION_TIMEOUT和SO_TIMEOUT区别
- android6.0SDK中删除HttpClient的相关类的解决方法
- http://www.cnblogs.com/dajiang02/archive/2011/08/13/2136929.html
- 使用HttpSessionListener接口监听Session的创建和失效
- HTTPS优化的一此常用技巧
- Android之AsyncTask异步任务下载网络图片
- 关于Xutils框架出现无法访问HttpRequestBase 找不到org.apache.http.client.methods.HttpRequestBase解决方案
- Http 状态码详解
- 卷积神经网络CNN理解
- HTTP请求
- 编译安装httpd 2.4
- OSI七层网络模型百科:
- 使用 tcpdump监听某一端口数据
- NAT网络地址转换