android网络组件的对比

volley
作为谷歌亲儿子,是如何一步步失宠的?一开始同组的同事用,后来大家都不用了
引用很简单:compile ‘com.mcxiaoke.volley:library:1.0.19’
或者直接复制粘贴lib库
然后就可以用StringRequest、JsonObjectRequest或者JsonArrayRequest来发送请求。
然后网上比较好的封装思路是:
发送get请求
发送post请求
加载网络图片
上传图片
但我在实际使用中发现一个问题,接收到的json内容中包括汉字时会是乱码用UrlDEcode解析也不行,于是找了找发现,解决方法只有一个,继承组建提供的StringRequest,重写parseNetworkResponse并在其中解析返回值

protected Response<String> parseNetworkResponse(NetworkResponse response) {
        String parsed;
        try {
            parsed = new String(response.data, "utf-8");
        } catch (UnsupportedEncodingException e) {
            parsed = new String(response.data);
        }
        return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
    }

所以我想说在这一点上volley不如okhttp好用,而且它已经停止维护了。
需要说明一点,在使用tls2.0时访问put接口出现正常提交返回异常的问题,此问题有可能与服务器或者volley有关

Retrofit
Retrofit和OkHttp3它其实是一样的,Retrofit是在okhttp上进行封装的,使用的是注解方式,使用起来相当方便,并且有很好的扩展性。
引用方法:compile ‘com.squareup.retrofit2:retrofit:2.0.2’
在Retrofit 2.0中,Converter 不再包含在package 中了,不插入Converter时Retrofit 只能接收字符串结果,如果启用需要引入依赖:compile ‘com.squareup.retrofit:converter-gson:2.0.2’
这个就是看着复杂,但写起来还挺容易的,结构上需要创建挺多实体类用于接数据。
目前遇到的一个问题是,在后端返回值书写不规范的情况时会报异常
举个例子:正常返回List 结构为Array,异常返回了“”,对返回了一个空字符串,应该返回“{}”就不会报错了,所以这个组件我建议你和后端商量着来。

picasso与retrofit一样都是在okhttp基础之上做的封装,项目中可以直接用了。

okhttp-utils是洪洋大神在okhttp上进行的封装开源库,刚好弥补了二次封装的缺陷,是目前封装的比较好的,同事超喜欢用这个,因为17年底停止维护了,我之前不慎踩坑现在使用Retrofit。
compile files(‘libs/okhttputils-2_6_2.jar’)
配置,在application中:

//https证书设置
//默认
HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(null, null, null);
//证书
HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(证书的inputstream, null, null);
//双向认证
HttpsUtils.getSslSocketFactory(
    证书的inputstream, 
    本地证书的inputstream, 
    本地证书的密码)
//设置
OkHttpClient okHttpClient = new OkHttpClient.Builder()
	//访问https
    .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)
//  .addInterceptor(new LoggerInterceptor("TAG"))
    .connectTimeout(10000L, TimeUnit.MILLISECONDS)
    .readTimeout(10000L, TimeUnit.MILLISECONDS)
    //其他配置
    .build();
 OkHttpUtils.initClient(okHttpClient);

注意:execute方法不传入callback即为同步的请求,返回Response
而一般情况下我们
一般访问:StringCallback
下载图片:BitmapCallback
下载文件:FileCallBack

OKHTTP
okhttp 和 async http是一个基础的通信库,都很强大,但需要自己封装使用才更方便,目前被谷歌官方用在android源码中了。
高性能的http库,支持同步、异步,而且实现了spdy、http2、websocket协议,api很简洁易用,和volley一样实现了http协议的缓存。
我遇到的几个问题是:
call返回时是子线程
终止请求困难

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章