对okhttp的封装类,okhttp见:https://github.com/square/okhttp.
-
Android Studio
使用前,对于Android Studio的用户,可以选择添加:
compile project(':okhttputils')
主项目中无需再引用okhttp的依赖,也不需要再额外导入Gson的lib.
-
Eclipse
下载okhttputils.jar,添加到项目libs,同时需要下载okhttp.jar和gson-2.2.1.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);