httpClient封装——异步、回调、下载
来源:互联网 发布:淘宝保健食品类押金 编辑:程序博客网 时间:2024/06/05 00:38
安卓学习部分就暂时不更新了,因为现在工作中直接做安卓开发了,以后会陆续记录工作中遇到的问题。
言归正传,最近工作开发安卓应用,由于我对安卓还不太熟,就先负责和服务端网络通信。要求:异步、回调。
一般我们在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读写等)在主线程里进行,防止线程堵塞。
- httpClient封装——异步、回调、下载
- anroid中httpclient异步下载
- 图片封装下载----异步代理下载
- 一个关于异步下载的封装
- 图片封装下载----异步block传值
- 封装一个 图片异步下载类
- 封装一个异步下载的工具包
- 图片封装下载——同步下载
- HttpClient详解(三)—get post封装实例
- HttpClient封装
- httpclient和异步httpclient
- 网络编程-HttpClient、异步http、Gson、多线程下载
- HttpClient下载
- objective-c一个简单的异步下载的封装
- iOS开发——post异步网络请求封装
- iOS开发——POST异步网络请求自行封装
- iOS开发——post异步网络请求封装
- Retrofit2的再封装实战—同步与异步请求
- 模仿360安全卫士项目笔记6
- monte carlo simulation
- U盘引导安装 OS X Yosemite 10.10.2 【黑苹果-图文教程】
- mahout 推荐系统示例
- 123
- httpClient封装——异步、回调、下载
- JavaEE_Mybatis_Mybaits 的 Mapper.xml中不能出现<(小于)符号
- LoadRunner11对Java项目中类及其他相关jar包的引用
- Eclipse中mahout运行环境的搭建以及推荐实例
- CALayer简单应用——隐式动画
- VS 和Visual Assist X快捷键
- Git 提示fatal: remote origin already exists 错误解决办法
- matlab中的fftshift
- MATLAB中的wavedec、wrcoef函数简析