对okhttp的封装类,okhttp见:https://github.com/square/okhttp.
-
Android Studio
使用前,对于Android Studio的用户,可以选择添加:
compile project(':okhttputils')主项目中无需再引用okhttp的依赖,也不需要再额外导入Gson的lib.
或者
compile 'com.zhy:okhttputils:1.0.2' -
Eclipse
下载okhttputils.jar,添加到项目libs,同时需要下载okhttp.jar和gson-2.2.1.jar和okio.jar
注意
由于整合了Gson,支持直接返回对象(例如User),对象集合(例如:List<User> ),所以记得使用时必须加入Gson的依赖,jar包gson-2.2.1.jar.
##目前支持
- 一般的get请求
- 一般的post请求
- 基于Http的文件上传
- 文件下载
- 上传下载的进度回调
- 加载图片
- 支持请求回调,直接返回对象、对象集合
- 支持session的保持
- 支持自签名网站https的访问,提供方法设置下证书就行
- 支持取消某个请求
##用法示例
//最基本 new OkHttpRequest.Builder() .url(url) .get(callback); //扩展 new OkHttpRequest.Builder() .url(url) .params(params) .headers(headers) .tag(tag) .get(callback);
//最基本 new OkHttpRequest.Builder() .url(url) .params(params) .post(callback); //扩展 new OkHttpRequest.Builder() .url(url) .params(params) .headers(headers) .tag(tag) .post(callback);
//基本 new OkHttpRequest.Builder() .url(url) .files(files) .upload(callback); //扩展 new OkHttpRequest.Builder() .url(url) .params(params) .headers(headers) .tag(tag) .files(files) .upload(callback);
//基本 new OkHttpRequest.Builder() .url(url) .destFileDir(destFileDir) .destFileName(destFileName) .download(callback); //扩展 new OkHttpRequest.Builder() .url(url) .params(params) .headers(headers) .tag(tag) .destFileDir(destFileDir) .destFileName(destFileName) .download(callback);
//基本 new OkHttpRequest.Builder() .url(url) .imageview(imageView) .displayImage(callback); //扩展 new OkHttpRequest.Builder() .url(url) .params(params) .headers(headers) .tag(tag) .imageview(imageView) .errorResId(errorResId) .displayImage(callback);
会自动根据ImageView的大小进行压缩。
//对象 new ResultCallback <User>() { //... @Override public void onResponse(User user) { mTv.setText(user.username); } } //集合 new ResultCallback<List<User>>() { //... @Override public void onResponse(List<User> users) { mTv.setText(users.get(0).username); } }
注意如果返回值是String,需要填写泛型:new ResultCallback<String>
new ResultCallback<List<User>>() { //... @Override public void inProgress(float progress) { //use progress: 0 ~ 1 } }
复写callback的inProgress方法即可。
非常简单,拿到xxx.cert的证书。
然后调用
OkHttpClientManager.getInstance() .getHttpsDelegate() .setCertificates(inputstream);
建议使用方式,例如我的证书放在assets目录:
/** * Created by zhy on 15/8/25. */ public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); try { OkHttpClientManager.getInstance() .getHttpsDelegate() .setCertificates(getAssets().open("aaa.cer"), getAssets().open("server.cer")); } catch (IOException e) { e.printStackTrace(); } } }
即可。别忘了注册Application。
ResultCallback包含两个回调,onBefore和onAfter。两个方法都在UI线程回调,一个在请求开始前,一个是请求结束。所以你可以在onBefore 弹出等待框等操作,onAfter隐藏等待框等。
OkHttpClientManager.getAsyn("http://192.168.56.1:8080/okHttpServer/user!getUser", new OkHttpClientManager.ResultCallback<User>() { @Override public void onBefore(Request request) { showWaitingDialog(); } @Override public void onAfter() { dismissWaitingDialog(); } @Override public void onError(Request request, Exception e) { e.printStackTrace(); } @Override public void inProgress(float progress) { } @Override public void onResponse(User u) { mTv.setText(u.toString()); } });
如果你的项目所有的框是一致的,或者可以分类,你可以按照如下方式编写几个模板:
public abstract class MyResultCallback<T> extends ResultCallback<T> { @Override public void onBefore() { super.onBefore(); //显示等待框等 setTitle("loading..."); } @Override public void onAfter() { super.onAfter(); //隐藏等待框等 setTitle("Sample-okHttp"); } }
目前对于支持的方法都添加了最后一个参数Object tag,取消则通过 OkHttpClientManager.cancelTag(tag)执行。
例如:在Activity中,当Activity销毁取消某个请求:
OkHttpRequest request = new OkHttpRequest.Builder() .url(url) .tag(tag) .get(callback); //单个取消 request.cancel();
@Override protected void onDestroy() { super.onDestroy(); //可以取消同一个tag的 OkHttpClientManager.cancelTag(this);//取消以Activity.this作为tag的请求 }
比如,当前Activity页面所有的请求以Activity对象作为tag,可以在onDestory里面统一取消。
可以在Application中,通过:
OkHttpClient client = OkHttpClientManager.getInstance().getOkHttpClient();
然后调用client的各种set方法。
例如:
client.setConnectTimeout(100000, TimeUnit.MILLISECONDS);