引用項(xiàng)目地址:https://github.com/hongyangAndroid/okhttputils
okhttp-utils是對(duì)okhttp的小小封裝,使得使用更加方便古话,對(duì)應(yīng)的okhttp版本是3.3.1
用法
Android Studio
compile 'com.zhy:okhttputils:2.6.2'
對(duì)其進(jìn)行的封裝有:
一般的get請(qǐng)求
一般的post請(qǐng)求
基于Http Post的文件上傳(類(lèi)似表單)
文件下載/加載圖片
上傳下載的進(jìn)度回調(diào)
支持取消某個(gè)請(qǐng)求
支持自定義Callback
支持HEAD歧杏、DELETE测垛、PATCH混卵、PUT
支持session的保持
支持自簽名網(wǎng)站https的訪問(wèn)入撒,提供方法設(shè)置下證書(shū)就行
配置OkHttpClient
默認(rèn)情況下疙剑,將直接使用okhttp默認(rèn)的配置生成OkhttpClient戒突,如果你有任何配置屯碴,記得在Application中調(diào)用initClient方法進(jìn)行設(shè)置。
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);
}
}
用法實(shí)例:
Get請(qǐng)求
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請(qǐng)求
OkHttpUtils.post()
.url(url)
.addParams("username", "WentGone")
.addParams("password", "123")
.build()
.execute(callback);
PostString請(qǐng)求
OkHttpUtils.postString()
.url(url)
.content(new Gson().toJson(new User("WentGone", "123")))
.build()
.execute(new MyStringCallback());
提交一個(gè)Gson字符串到服務(wù)器端膊存。
PostFile請(qǐng)求
OkHttpUtils.postFile()
.url(url)
.file(file)
.build()
.execute(new MyStringCallback());
將文件作為請(qǐng)求體导而,發(fā)送到服務(wù)器。
Post表單形式上傳文件
OkHttpUtils.post()//
.addFile("mFile", "msg1.png", file)//
.addFile("mFile", "test1.txt", file2)//
.url(url)
.params(params)//
.headers(headers)//
.build()//
.execute(new MyStringCallback());
支持單個(gè)多個(gè)文件隔崎,addFile的第一個(gè)參數(shù)為文件的key今艺,即類(lèi)別表單中<input type="file" name="mFile"/>的name屬性。
自定義CallBack
目前內(nèi)部包含StringCallBack,FileCallBack,BitmapCallback爵卒,可以根據(jù)自己的需求去自定義Callback虚缎,例如希望回調(diào)User對(duì)象:
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);
}
});
顯示圖片实牡,回調(diào)傳入BitmapCallback即可。
上傳下載的進(jìn)度顯示
new Callback<T>()
{
//...
@Override
public void inProgress(float progress)
{
//use progress: 0 ~ 1
}
}
callback回調(diào)中有inProgress方法轴合,直接復(fù)寫(xiě)即可创坞。
同步的請(qǐng)求
Response response = OkHttpUtils.get()
.url(url)
.tag(this)
.build()
.execute();
execute方法不傳入callback即為同步的請(qǐng)求,返回Response值桩。
取消單個(gè)請(qǐng)求
RequestCall call = OkHttpUtils.get().url(url).build();
call.cancel();
根據(jù)tag取消請(qǐng)求
目前對(duì)于支持的方法都添加了最后一個(gè)參數(shù)Object tag摆霉,取消則通過(guò)OkHttpUtils.cancelTag(tag)執(zhí)行。
例如:在Activity中奔坟,當(dāng)Activity銷(xiāo)毀取消請(qǐng)求:
OkHttpUtils.get()
.url(url)
.tag(this)
.build()
@Override
protected void onDestroy()
{
super.onDestroy();
//可以取消同一個(gè)tag的
OkHttpUtils.cancelTag(this);//取消以Activity.this作為tag的請(qǐng)求
}
比如,當(dāng)前Activity頁(yè)面所有的請(qǐng)求以Activity對(duì)象作為tag搭盾,可以在onDestory里面統(tǒng)一取消咳秉。
混淆
#okhttputils
-dontwarn com.zhy.http.**
-keep class com.zhy.http.**{*;}
#okhttp
-dontwarn okhttp3.**
-keep class okhttp3.**{*;}
#okio
-dontwarn okio.**
-keep class okio.**{*;}