okhttp-utils是张鸿洋是基于OkHttp封装的框架库。实际工作中,使用的不多,对于小型项目的网络请求和文件传输可以考虑直接使用。否则还是基于主流的OkHttp+Retrift+RxJava框架。
对于OkHttp使用,可以自己根据自己项目需要,做一些封装。如果应付手头临时项目,可以借鉴GitHub上一些开源OkHttp封装库.只要去GitHub上搜索下OkHttp 会出来很多封装的框架。
分析okhttp-utils使用,只是用于自己学习了解。
一.将okhttp-utils当做module引入项目中
二.okhttp-utils引入到项目中文件列表目录:
三.okhttp-utils 基本使用
1. //get 请求数据
OkHttpUtils .get() .url(url) .id(100) .build() .execute(new MyStringCallback());
2.//post 请求数据
OkHttpUtils .postString() .url(url) .mediaType(MediaType.parse("application/json; charset=utf-8")) .content(new Gson().toJson(new User("zhy", "123"))) .build() .execute(new MyStringCallback());
3.//上传文件
OkHttpUtils .postFile() .url(url) .file(file) .build() .execute(new MyStringCallback());
4.//加载图片
OkHttpUtils .get() .url(url) .tag(this) .build() .connTimeOut(20000) .readTimeOut(20000) .writeTimeOut(20000) .execute(new BitmapCallback() { @Override public void onError(Call call, Exception e, int id) { mTv.setText("onError:" + e.getMessage()); } @Override public void onResponse(Bitmap bitmap, int id) { Log.e("TAG", "onResponse:complete"); mImageView.setImageBitmap(bitmap); } });
5.//上传单个文件
OkHttpUtils.post()// .addFile("mFile", "messenger_01.png", file) .url(url) .params(params)//带表单数据 .headers(headers) .build() .execute(new MyStringCallback());
6.//上传多个文件
OkHttpUtils.post() .addFile("mFile", "messenger_01.png", file) .addFile("mFile", "test1.txt", file2) .url(url) .params(params)//带表单数据 .build() .execute(new MyStringCallback());
7.//下载文件
OkHttpUtils .get() .url(url) .build() .execute(new FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(), "gson-2.2.1.jar") { @Override public void onBefore(Request request, int id) { } @Override public void inProgress(float progress, long total, int id) { //进度条显示 mProgressBar.setProgress((int) (100 * progress)); Log.e(TAG, "inProgress :" + (int) (100 * progress)); } @Override public void onError(Call call, Exception e, int id) { Log.e(TAG, "onError :" + e.getMessage()); } @Override public void onResponse(File file, int id) { Log.e(TAG, "onResponse :" + file.getAbsolutePath()); } });
定义的公共回调方法:
public class MyStringCallback extends StringCallback { @Override public void onBefore(Request request, int id) { } @Override public void onAfter(int id) { } @Override public void onError(Call call, Exception e, int id) { e.printStackTrace(); } @Override public void onResponse(String response, int id) { Log.e(TAG, "onResponse:complete"); mTv.setText("onResponse:" + response); switch (id) { case 100: Toast.makeText(MainActivity.this, "http", Toast.LENGTH_SHORT).show(); break; case 101: Toast.makeText(MainActivity.this, "https", Toast.LENGTH_SHORT).show(); break; } } @Override public void inProgress(float progress, long total, int id) { Log.e(TAG, "inProgress:" + progress); mProgressBar.setProgress((int) (100 * progress)); } }