本文共 5226 字,大约阅读时间需要 17 分钟。
OkHttp //An HTTP & HTTP/2 client for Android and Java applications xml <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.1.2</version> </dependency>Gradle: groovy compile 'com.squareup.okhttp3:okhttp:3.1.2'
可以在Application中,通过:
OkHttpUtils.getInstance().setXXX()
如果需要完全配置OkHttpClient
OkHttpUtils.getInstance(new OkHttpClient.Builder().setXXX().build());
即完全的自己构造OkHttpClient,然后传入getInstance(okHttpClient)方法。
比如涉及到文件的需要设置读写等待时间多一点。
OkHttpUtils .get()// .url(url)// .tag(this)// .build()// .connTimeOut(20000) .readTimeOut(20000) .writeTimeOut(20000) .execute()
调用build()之后,可以随即设置各种timeOut.
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) { } });
OkHttpUtils .post() .url(url) .addParams("username", "hyman") .addParams("password", "123") .build() .execute(callback);
OkHttpUtils .postString() .url(url) .content(new Gson().toJson(new User("zhy", "123"))) .build() .execute(new MyStringCallback());
提交一个Gson字符串到服务器端。
OkHttpUtils .postFile() .url(url) .file(file) .build() .execute(new MyStringCallback());
将文件作为请求体,发送到服务器。
OkHttpUtils.post()// .addFile("mFile", "messenger_01.png", file)// .addFile("mFile", "test1.txt", file2)// .url(url) .params(params)// .headers(headers)// .build()// .execute(new MyStringCallback());
支持单个多个文件,addFile
的第一个参数为文件的key,即类别表单中<input type="file" name="mFile"/>
的name属性。
目前内部包含StringCallBack
,FileCallBack
,BitmapCallback
,可以根据自己的需求去自定义Callback,例如希望回调User对象:
public abstract class UserCallback extends Callback { @Override public User parseNetworkResponse(Response response) throws IOException { String string = response.body().string(); User user = new Gson().fromJson(string, User.class); return user; }} OkHttpUtils .get()// .url(url)// .addParams("username", "hyman")// .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); } });
通过parseNetworkResponse
回调的response进行解析,该方法运行在子线程,所以可以进行任何耗时操作,详细参见sample。
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
方法,直接复写即可。
OkHttpUtils .put()//also can use delete() ,head() , patch() .requestBody(RequestBody.create(null, "may be something"))// .build()// .execute(new MyStringCallback());
如果需要requestBody,例如:PUT、PATCH,自行构造进行传入。
Response response = OkHttpUtils .get()// .url(url)// .tag(this)// .build()// .execute();
execute方法不传入callback即为同步的请求,返回Response。
在Application的onCreate方法中通过debug方法开启
OkHttpUtils.getInstance().debug("testDebug");
RequestCall call = OkHttpUtils.get().url(url).build(); call.cancel();
目前对于支持的方法都添加了最后一个参数Object tag
,取消则通过OkHttpUtils.cancelTag(tag)
执行。
例如:在Activity中,当Activity销毁取消请求:
OkHttpUtils .get()// .url(url)// .tag(this)// .build()//@Overrideprotected 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.**{*;}-keep interface com.zhy.http.**{*;}#okhttp-dontwarn okhttp3.**-keep class okhttp3.**{*;}-keep interface okhttp3.**{*;}#okio-dontwarn okio.**-keep class okio.**{*;}-keep interface okio.**{*;}
转载地址:http://kdegi.baihongyu.com/