详解传送门
maven库
implementation 'com.lzy.net:okgo:3.0.4'下面贴出一个简单的工具类
import android.app.Activity; import android.app.Application; import com.lzy.okgo.OkGo; import com.lzy.okgo.callback.FileCallback; import com.lzy.okgo.callback.StringCallback; import com.lzy.okgo.model.Progress; import com.lzy.okgo.request.base.Request; import java.io.File; import java.io.IOException; import java.text.DecimalFormat; import java.util.Map; import java.util.concurrent.TimeUnit; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Response; /** * Author : Z-JC * Date : 2020/1/15 * Description : */ public class OkgoUtil { private static volatile OkgoUtil instance = null; public static OkgoUtil getInstance() { if (instance == null) { synchronized (OkgoUtil.class) { if (instance == null) { instance = new OkgoUtil(); } } } return instance; } /** * 初始化okgo * * @param application */ public void init(Application application) { OkHttpClient.Builder builder = new OkHttpClient.Builder() .readTimeout(30 * 1000, TimeUnit.MILLISECONDS) .writeTimeout(30 * 1000, TimeUnit.MILLISECONDS) .connectTimeout(30 * 1000, TimeUnit.MILLISECONDS); OkGo.getInstance().setOkHttpClient(builder.build()).init(application); } /** * http Get请求 * * @param url * @param stringCallback * @param map */ public void get(String url, Map<String, String> map, StringCallback stringCallback) { OkGo.<String>get(url) .params(map) .retryCount(3) .execute(stringCallback); } /** * http Post请求 * * @param url * @param stringCallback * @param map */ public void post(String url, Map<String, String> map, StringCallback stringCallback) { OkGo.<String>post(url) .params(map) .retryCount(3) .execute(stringCallback); } /** * get同步请求 * * @param url * @param map * @return */ public Response getSync(String url, Map<String, String> map) { try { return OkGo.<String>get(url) .params(map) .retryCount(3) .execute(); } catch (IOException e) { e.printStackTrace(); return null; } } /** * post同步请求 * * @param url * @param map */ public Response postSync(String url, Map<String, String> map) { try { return OkGo.<String>post(url) .params(map) .retryCount(3) .execute(); } catch (IOException e) { e.printStackTrace(); return null; } } /** * 下载 * * @param context 上下文 * @param httpUrl 下载文件url * @param destFileDir 本地文件夹 * @param destFileName 本地文件名 * @param callBack 下载回调 */ public void download(Activity context, String httpUrl, String destFileDir, String destFileName, HttpCallBack callBack) { OkGo.<File>get(httpUrl).tag(context).execute(new FileCallback(destFileDir, destFileName) { //文件下载时指定下载的路径以及下载的文件的名称 @Override public void onStart(Request<File, ? extends Request> request) { super.onStart(request); if (callBack != null) { callBack.onStartDownload(request.getUrl()); } } @Override public void onSuccess(com.lzy.okgo.model.Response<File> response) { String filePath = response.body().getAbsolutePath(); if (callBack != null) { callBack.onResponse(filePath); } } @Override public void onFinish() { super.onFinish(); if (callBack != null) { callBack.onEndDownload("下载文件完成"); } } @Override public void onError(com.lzy.okgo.model.Response<File> response) { super.onError(response); String error = response.getException().toString(); if (callBack != null) { callBack.onFailure(error); } } @Override public void downloadProgress(Progress progress) { super.downloadProgress(progress); float dLProgress = progress.fraction; if (callBack != null) { DecimalFormat decimalFormat = new DecimalFormat("0.00"); String p = decimalFormat.format(dLProgress).replaceAll(",", "."); callBack.onSchedule(Float.valueOf(p)); double pro = Double.valueOf(p) * 100; } } }); } /** * postFrom表单提交 * * @param httpUrl * @param stringMap * @param callback */ public void postFrom(String httpUrl, Map<String, String> stringMap, Callback callback) { FormBody.Builder formBody = new FormBody.Builder(); for (String key : stringMap.keySet()) { formBody.add(key, stringMap.get(key)); } okhttp3.Request request = new okhttp3.Request.Builder() .url(httpUrl) .post(formBody.build()) .build(); Call call = OkGo.getInstance().getOkHttpClient().newCall(request); call.enqueue(callback); } public interface HttpCallBack { /** * 下载结束 */ void onEndDownload(String end); /** * 开始结束 */ void onStartDownload(String start);//开始下载 /** * 下载进度 */ void onSchedule(float schedule);//进度 /** * 访问成功回调接口 */ void onResponse(String filePath); /** * 访问成错误回调接口 */ void onFailure(String error); } /** * 取消全部请求 */ public void cancelAll() { OkGo.getInstance().cancelAll(); } }
