今天来总结一下常用网络开源库的特点与简单用法。
AsyncHttp Asynchttp 基于Apache HttpClient库;
特点: 1.异步网络请求,在匿名回调中处理响应,使用简单 2.使用线程池来管理并发的网络请求 3.永久的cookie保存,内部实现用的是Android的SharedPreferences 4.库很小,所有的一切只有60kb 5.自动智能的请求重连 6.内置Json解析
用法:
AsyncHttpClient client = new AsyncHttpClient(); //永久保存cookie PersistentCookieStore myCookieStore = new PersistentCookieStore(this); client.setCookieStore(myCookieStore); client.get(getAbsoluteUrl(url), params, responseHandler); client.post(getAbsoluteUrl(url), params, responseHandler); private AsyncHttpResponseHandler mHandler = new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBytes) { } @Override public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) { } };Volley Volley,谷歌在android2.2之后不建议使用Http Client,Volley在android2.2及以下版本使用Http Client,而android2.3 及以上版本使用HttpUrlConnection,它是android开发团队在2013年推出的,大小大概153KB;
特点: 1.特别适合数据量小,通信频繁的网络操作,异步网络请求 2.支持使用okhttp作为传输层 3.扩展性强。Volley 中大多是基于接口的设计,可配置性强 4.提供简便的图片加载工具 5.访问网络数据时直接开启固定个数线程访问网络 6.不支持 post 大数据,所以不适合上传文件 用法: //创建一个RequestQueue对象。 RequestQueue mQueue = Volley.newRequestQueue(context); //创建一个Request对象。 StringRequest stringRequest = new StringRequest(Method.POST, url, listener, errorListener) { @Override protected Map<String, String> getParams() throws AuthFailureError { return params; } }; //设置请求时间 stringRequest.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 1, 1.0f)); //将Request对象添加到RequestQueue里面。 mQueue.add(stringRequest); } { 加载图片只需把StringRequest改为ImageRequest ,然后设置一些图片宽高 图片scaleType属性等参数 } { 使用ImageLoader可以实现对图片的缓存 RequestQueue queue = Volley.newRequestQueue(getApplicationContext()); String url = "https://www.baidu.com/img/bdlogo.png"; ImageLoader loader=new ImageLoader(queue,new BitmapCache() ); // 第一个参数指定用于显示图片的ImageView控件 // 第二个参数指定加载图片的过程中显示的图片 // 第三个参数指定加载图片失败的情况下显示的图片 ImageLoader.ImageListener listener=ImageLoader.getImageListener(iv,R.mipmap.ic_launcher,R.mipmap.ic_launcher); // 调用ImageLoader的get()方法来加载图片 // 第一个参数就是图片的URL地址 // 第二个参数则是刚刚获取到的ImageListener对象 // 如果想对图片的大小进行限制,也可以使用get()方法的重载,指定图片允许的最大宽度和高度,即通过第三第四个参数指定 loader.get(url,listener);XUtils XUtils 一个 Android 公共库框架,主要包括四个部分:View,Db, Http, Bitmap 四个模块,大小900KB左右;
View 模块主要的功能是通过注解绑定 UI,资源,事件。Db 模块是一个数据库 orm 框架, 简单的语句就能进行数据的操作。Http 模块主要访问网络,支持同步,异步方式的请求,支持文件的下载。Bitmap 模块是加载图片以及图片的处理, 支持加载本地,网络图片。而且支持图片的内存和本地缓存。特点: 1.通过HTTPclient请求网络,bitmap模块通过urlhttpconnection 2.支持大数据的请求,速度比volley稍快,扩展性低 3.通过开启线程池来管理线程用法:
//get请求 HttpUtils util = new HttpUtils(); util.send(HttpRequest.HttpMethod.GET, "http://www.baidu.com", new RequestCallBack<Sting>() { @Override public void onSuccess(ResponseInfo<Sting> responseInfo) { // TODO Auto-generated method stub } @Override public void onFailure(HttpException error, String msg) { // TODO Auto-generated method stub } }); //post请求: HttpUtils httpUtils = new HttpUtils(); RequestParams params = new RequestParams(); params.addBodyParameter("CODE", "31"); httpUtils.send(HttpMethod.POST, Constants.URL_HOST, params, new RequestCallBack<String>() { @Override public void onFailure(HttpException arg0, String arg1) { } @Override public void onSuccess(ResponseInfo<String> arg0) { } } });Okhttp Okhttp 是一个 Java 的 HTTP+SPDY(SPDY是基于TCP的应用层协议,用以最小化网络延迟,提升网络速度) 客户端开发包,同时也支持 Android。需要Android 2.3以上。
特点: 1.是安卓版http客户端,非常高效,支持SDPY,GZIP和HTTP缓存 2.自动处理常见的网络问题,比如二次连接,SSL握手问题。 3.从4.4开始httpurlconnection的底层实现采用的是okhttp 4.支持json,通过回调进行异步操作 5. 基于 NIO (非阻塞式读取数据)和 Okio(基于 IO 和 NIO 基础上做的一个更简单、高效处理数据流的一个库)用法:
//新建一个okhttpclient对象 OkHttpClient client = new OkHttpClient(); //通过Request.Builder方法新建一个request对象 Request request = new Request.Builder() .url(url) .build(); Response response = null; try { //调用request的newCall方法得到响应结果 response = client.newCall(request).execute(); return response.body().string(); } catch (IOException e) { e.printStackTrace(); } return null;Retrofit Retrofit 支持同步和异步两种方式,在使用时,需要将请求地址转换为接口,通过注解来指定请求方法,请求参数,请求头,返回值等信息; Retrofit+okhttp+rxjava是现在常用的请求形式
特点: 1.性能最好,处理最快,速度上比volley更快 2.传输层默认使用okhttp 3.默认使用Gson
用法:
//首先完成请求所用的service,是一个interface,完全通过注解完成配置 public interface GitHubService { @GET("users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user); } //创建Retrofit实例 Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com/") .build(); //得到GitHubService对象 GitHubService service = retrofit.create(GitHubService.class); //调用接口方法 Call<List<Repo>> repos = service.listRepos("octocat");