`
fly_宇光十色
  • 浏览: 64553 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

httpClient封装——异步、回调、下载

阅读更多

安卓学习部分就暂时不更新了,因为现在工作中直接做安卓开发了,以后会陆续记录工作中遇到的问题。

言归正传,最近工作开发安卓应用,由于我对安卓还不太熟,就先负责和服务端网络通信。要求:异步、回调。

一般我们在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读写等)在主线程里进行,防止线程堵塞。

 

分享到:
评论

相关推荐

    android WebService封装 支持回调

    本文将深入探讨如何对WebService进行封装,使其支持回调接口,从而简化开发流程,提高代码复用性。 首先,理解WebService的基本概念:WebService是一种基于Web的、能够进行跨平台交互的服务。它可以使用XML...

    OptimusClient:一个基于 Apache 的 HttpClient 库的 Android 异步、基于回调的 Http 客户端

    1.异步以回调实现http请求。 2.使用线程池并发请求限制资源的使用。 3.支持Http的所有谓词。 4.封装请求参数,使调用更加容易。 5.可配置化的实现,全局配置与单次请求配置结合,让一切更可控。 6.支持Http缓存。 ...

    httpclient4.5工具包

    同时,它还支持回调函数,使得处理结果变得更加灵活。 8. **最佳实践** 使用HttpClient时,应注意关闭资源(如`CloseableHttpResponse`),避免内存泄漏。另外,合理配置连接池大小,以平衡资源利用率和系统负载。 ...

    HttpClient.zip_HTTP_c++ httpclass_c++ httpclient类_http client c+

    7. **异步处理**:为了支持非阻塞的网络I/O,HttpClient可能提供异步版本的请求方法,如`asyncGet()`和`asyncPost()`,这些方法通常会采用回调函数或future/promise的方式来处理结果。 在实际应用中,HttpClient...

    javaeye api [java httpclient版] 简单封装

    - 为了实现非阻塞的网络调用,JavaEyeClient 可能支持异步请求,使用回调或者 Future 来处理结果。 6. **异常处理**: - 封装后的库通常会提供更友好的异常处理,例如 `JavaEyeClientException`,它可能包含了...

    Angular异步变同步处理方法

    异步操作典型地使用回调函数(callback)来处理操作完成时的行为,但过多的嵌套(回调地狱)会使得代码难以阅读和维护。因此,Promise规范被引入,它提供了一种更加清晰和可维护的方式来处理异步代码。 Promise对象...

    安卓异步httpclient

    因此,【安卓异步httpclient】应运而生,它将这些常见操作进行了抽象和封装,使得开发者能更专注于业务逻辑,而非底层网络通信细节。 这个库的主要特性包括: 1. **异步处理**:通过使用异步API,可以在后台线程中...

    javaHttp异步请求

    7. **错误处理**: 异步请求的错误处理通常在回调函数的`failed()`方法中进行,需要捕获并处理`IOException`和其他可能的异常。 8. **连接管理和复用**: 使用`HttpAsyncClient`时,需要注意连接管理和复用,以优化...

    java http post和get请求回调

    Java 8引入了CompletableFuture和Lambda表达式,可以轻松实现异步回调: ```java public void asyncHttpPost(String url, Map, String> params, Consumer<String> callback) { CompletableFuture.supplyAsync(() -...

    HttpAsyncClient异步http工具包

    1. **异步模型**: 使用非阻塞I/O(NIO)技术,使得客户端在发送请求后无需等待响应,可以立即处理其他任务,只有在接收到响应或出现错误时才会回调指定的处理器。 2. **Future接口**: 发起请求后,HttpAsyncClient...

    commons-httpclient-3.0.1-src.zip

    源码中涉及线程安全的设计和异步回调机制,对于多线程编程和并发控制有很好的学习价值。 6. **自定义策略和拦截器**:HttpClient 允许用户通过自定义策略(如连接策略、重试策略)和拦截器(RequestInterceptor 和 ...

    HttpClient接口调用工具类(附带demo)

    同步调用会阻塞直到请求完成,而异步调用则允许你注册回调函数,在请求完成时处理结果。 8. **连接管理**: 高效的HTTP请求需要良好的连接管理,HttpClient提供了`PoolingHttpClientConnectionManager`来管理连接...

    JavaHttpClient

    - HttpClient支持异步请求,使用`Future<HttpResponse>`,在回调函数中处理响应,提高并发性能。 6. **处理响应数据**: - `EntityUtils`类提供了对响应实体的处理,如`toString()`用于字符串转换,`consume()`...

    HttpClient

    异步模式下,发送请求后,HttpClient会立即返回,不等待响应,待响应到达时,会触发预先注册的回调函数。 Socket是TCP/IP通信的基础,HttpClient在底层使用Socket与服务器通信。Socket提供了低级别的、面向连接的、...

    httpClient请求

    3. **支持异步请求**:对于高并发场景,可能会有异步请求接口,通过回调或Future来获取结果。 4. **认证和授权**:处理基本认证、OAuth、JWT等身份验证机制。 5. **链式调用**:通过链式调用来设置请求属性,提高...

    c#多线程线程池和异步编程

    创建一个`Timer`实例,设置好间隔时间和回调函数,即可在指定间隔后执行指定的回调方法。例如: ```csharp public void TimerCallback(object state) { // 定时任务的代码 } // 创建并启动Timer var timer = new ...

    C#异步编程方式以及示例

    委托提供了一种回调机制,Task类封装了异步操作,而async/await则简化了异步代码的编写。理解并熟练掌握这些概念和技巧,对于编写高效、响应性的C#应用程序至关重要。通过实践和探索AsyncDemo项目中的示例,你可以更...

    cocos2dx HttpClient网络访问

    4. **异步处理与回调函数**: 由于网络操作通常涉及I/O操作,为避免阻塞主线程,HttpClient采用异步方式进行网络访问。开发者需要提供回调函数来处理网络请求的结果,如请求成功、失败或超时等状态,以及返回的数据...

    httpClient

    5. **异步请求与回调**: HttpClient支持异步执行请求,通过`Future<HttpResponse>`接口: ```java Future<HttpResponse> future = httpClient.execute(httpGet, new FutureCallback() { @Override public void...

    cocos2dx-3.6封装的弱联网类(Http请求)

    在Cocos2d-x游戏开发框架中,网络...总之,封装Cocos2d-x 3.6的弱联网类涉及到网络请求的初始化、异步处理、回调函数、错误处理和用户体验优化等多个方面。理解并掌握这些知识点对于游戏开发中的服务器交互至关重要。

Global site tag (gtag.js) - Google Analytics