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();
}
}