okHttpUtils封裝庫志支持:
- 一般的get請求
- 一般的post請求
- 基於Http的文件上傳
- 文件下載
- 上傳下載的進度回調
- 加載圖片
- 支持請求回調,直接返回對象、對象集合
- 支持session的保持
- 支持自簽名網站https的訪問,提供方法設置下證書就行
- 支持取消某個請求
基本方法的使用 :
第一步:
注入依賴:compile 'com.zhy:okhttputils:2.0.0'
第二步:添加網絡權限
基本的用法格式為:
OkHttpUtils .get() .url(url) .addParams("username", "hyman") .addParams("password", "123") .build() .execute(callback);
通過鏈式去根據自己的需要添加各種參數,最后調用execute(callback)進行執行,傳入callback則代表是異步。如果只是execute()則代表同步的方法調用。
GET請求
String url = "http://www.csdn.net/"; OkHttpUtils .get() .url(url) .addParams("username", "hyman") .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", "hyman") .addParams("password", "123") .build() .execute(callback);
Post String
OkHttpUtils .postString() .url(url) .content(new Gson().toJson(new User("zhy", "123"))) .build() .execute(new MyStringCallback());
將string作為請求體傳入到服務端,例如json字符串
Post File
OkHttpUtils .postFile() .url(url) .file(file) .build() .execute(new MyStringCallback());
將file作為請求體傳入到服務端.
基於POST的文件上傳(類似web上的表單)
OkHttpUtils.post()// .addFile("mFile", "messenger_01.png", file)// .addFile("mFile", "test1.txt", file2)// .url(url) .params(params)// .headers(headers)// .build()// .execute(new MyStringCallback());
下載文件
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()); } });
顯示圖片
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); } });
對於上傳下載的回調
new Callback<?>() { //... @Override public void inProgress(float progress) { //use progress: 0 ~ 1 } }
對於傳入的callback有個inProgress方法,需要拿到進度直接復寫該方法即可。
對於自動解析為實體類
目前去除了Gson的依賴,提供了自定義Callback的方式,讓用戶自己去解析返回的數據,
目前提供了StringCallback
,FileCallback
,BitmapCallback
分別用於返回string,文件下載,加載圖片。
當然如果你希望解析為對象,你可以:
public abstract class UserCallback extends Callback<User> { //非UI線程,支持任何耗時操作 @Override public User parseNetworkResponse(Response response) throws IOException { String string = response.body().string(); User user = new Gson().fromJson(string, User.class); return user; }
自己使用自己喜歡的Json解析庫完成即可。
解析成List<User>,則如下: public abstract class ListUserCallback extends Callback<List<User>> { @Override public List<User> parseNetworkResponse(Response response) throws IOException { String string = response.body().string(); List<User> user = new Gson().fromJson(string, List.class); return user; } }
對於https單向認證
非常簡單,拿到xxx.cert的證書。然后調用
OkHttpUtils.getInstance().setCertificates(inputstream);
建議使用方式,例如我的證書放在assets目錄:
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); try { OkHttpUtils .getInstance() .setCertificates(getAssets().open("aaa.cer"), getAssets().open("server.cer")); } catch (IOException e) { e.printStackTrace(); } } }
即可。別忘了注冊Application。
注意:如果https網站為權威機構頒發的證書,不需要以上設置。自簽名的證書才需要。
配置
(1)全局配置
可以在Application中,通過:
OkHttpClient client = OkHttpUtils.getInstance().getOkHttpClient();
然后調用client的各種set方法。如:
client.setConnectTimeout(100000, TimeUnit.MILLISECONDS);
(2)為單個請求設置超時
比如涉及到文件的需要設置讀寫等待時間多一點。
OkHttpUtils .get()// .url(url)// .tag(this)// .build()// .connTimeOut(20000) .readTimeOut(20000) .writeTimeOut(20000) .execute()
調用build()之后,可以隨即設置各種timeOut.
(3)取消單個請求
RequestCall call = OkHttpUtils.get().url(url).build(); call.cancel();
(4)根據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里面統一取消。