引用项目地址:https://github.com/hongyangAndroid/okhttputils
okhttp-utils是对okhttp的小小封装,使得使用更加方便,对应的okhttp版本是3.3.1
用法
Android Studio
compile 'com.zhy:okhttputils:2.6.2'
对其进行的封装有:
一般的get请求
一般的post请求
基于Http Post的文件上传(类似表单)
文件下载/加载图片
上传下载的进度回调
支持取消某个请求
支持自定义Callback
支持HEAD、DELETE、PATCH、PUT
支持session的保持
支持自签名网站https的访问,提供方法设置下证书就行
配置OkHttpClient
默认情况下,将直接使用okhttp默认的配置生成OkhttpClient,如果你有任何配置,记得在Application中调用initClient方法进行设置。
public class BaseApplication extends Application{
private static BaseApplication application;
public static BaseApplication getInstance(){
return application;
}
@Override
public void onCreate() {
super.onCreate();
OkHttpClient okHttpClient = new OkHttpClient.Builder()
// .addInterceptor(new LoggerInterceptor("TAG"))
.connectTimeout(10000L, TimeUnit.MILLISECONDS)
.readTimeout(10000L, TimeUnit.MILLISECONDS)
//其他配置
.build();
OkHttpUtils.initClient(okHttpClient);
}
}
用法实例:
Get请求
OkHttpUtils
.get()
.url(url)
.addParams("username", "WentGone")
.addParams("password", "123")
.build()
.execute(new StringCallback()
{
@Override
public void onError(Request request, Exception e)
{
}
@Override
public void onResponse(String response)
{
}
});
Post请求
OkHttpUtils.post()
.url(url)
.addParams("username", "WentGone")
.addParams("password", "123")
.build()
.execute(callback);
PostString请求
OkHttpUtils.postString()
.url(url)
.content(new Gson().toJson(new User("WentGone", "123")))
.build()
.execute(new MyStringCallback());
提交一个Gson字符串到服务器端。
PostFile请求
OkHttpUtils.postFile()
.url(url)
.file(file)
.build()
.execute(new MyStringCallback());
将文件作为请求体,发送到服务器。
Post表单形式上传文件
OkHttpUtils.post()//
.addFile("mFile", "msg1.png", file)//
.addFile("mFile", "test1.txt", file2)//
.url(url)
.params(params)//
.headers(headers)//
.build()//
.execute(new MyStringCallback());
支持单个多个文件,addFile的第一个参数为文件的key,即类别表单中的name属性。
自定义CallBack
目前内部包含StringCallBack,FileCallBack,BitmapCallback,可以根据自己的需求去自定义Callback,例如希望回调User对象:
OkHttpUtils.get()//
.url(url)//
.addParams("username", "WentGone")//
.addParams("password", "123")//
.build()//
.execute(new UserCallback()
{
@Override
public void onError(Request request, Exception e)
{
mTv.setText("onError:" + e.getMessage());
}
@Override
public void onResponse(User response)
{
mTv.setText("onResponse:" + response.username);
}
});
下载文件
OkHttpUtils.get()
.url(url)
.build()
.execute(new FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(), "gson-2.2.1.jar")//
{
@Override
public void inProgress(float progress)
{
mProgressBar.setProgress((int) (100 * progress));
}
@Override
public void onError(Request request, Exception e)
{
Log.e(TAG, "onError :" + e.getMessage());
}
@Override
public void onResponse(File file)
{
Log.e(TAG, "onResponse :" + file.getAbsolutePath());
}
});
注意下载文件可以使用FileCallback,需要传入文件需要保存的文件夹以及文件名。
显示图片
OkHttpUtils.get()
.url(url)
.build()
.execute(new BitmapCallback()
{
@Override
public void onError(Request request, Exception e)
{
mTv.setText("onError:" + e.getMessage());
}
@Override
public void onResponse(Bitmap bitmap)
{
mImageView.setImageBitmap(bitmap);
}
});
显示图片,回调传入BitmapCallback即可。
上传下载的进度显示
new Callback()
{
//...
@Override
public void inProgress(float progress)
{
//use progress: 0 ~ 1
}
}
callback回调中有inProgress方法,直接复写即可。
同步的请求
Response response = OkHttpUtils.get()
.url(url)
.tag(this)
.build()
.execute();
execute方法不传入callback即为同步的请求,返回Response。
取消单个请求
RequestCall call = OkHttpUtils.get().url(url).build();
call.cancel();
根据tag取消请求
目前对于支持的方法都添加了最后一个参数Object tag,取消则通过OkHttpUtils.cancelTag(tag)执行。
例如:在Activity中,当Activity销毁取消请求:
OkHttpUtils.get()
.url(url)
.tag(this)
.build()
@Override
protected void onDestroy()
{
super.onDestroy();
//可以取消同一个tag的
OkHttpUtils.cancelTag(this);//取消以Activity.this作为tag的请求
}
比如,当前Activity页面所有的请求以Activity对象作为tag,可以在onDestory里面统一取消。
混淆
#okhttputils
-dontwarn com.zhy.http.**
-keep class com.zhy.http.**{*;}
#okhttp
-dontwarn okhttp3.**
-keep class okhttp3.**{*;}
#okio
-dontwarn okio.**
-keep class okio.**{*;}