import android.util.Log;
import androidx.annotation.NonNull;
import com.blankj.utilcode.util.FileUtils;
import com.blankj.utilcode.util.GsonUtils;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import com.google.gson.reflect.TypeToken;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import cn.mvp.mlibs.utils.UIUtils;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.HttpUrl;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
public class NetUtils {
private static OkHttpClient client = new OkHttpClient();
private static Gson gson = new Gson();
public static <T> void getRequest(String url, Map<String, String> params, final Class<T> clazz, final OnResponseCallback<T> callback) {
url = SpUtils.getStr(SpUtils.KEY_HTTP_BASE_URL, Constants.HTTP_BASE_URL) + "/" + url;
HttpUrl.Builder urlBuilder = HttpUrl.parse(url).newBuilder();
if (params != null) {
for (Map.Entry<String, String> entry : params.entrySet()) {
urlBuilder.addQueryParameter(entry.getKey(), entry.getValue());
}
}
Request request = new Request.Builder()
.url(urlBuilder.build())
.build();
executeRequest(request, clazz, callback);
}
public static <T> void getRequest(String url, final Class<T> clazz, final OnResponseCallback<T> callback) {
Request request = new Request.Builder()
.url(url)
.build();
executeRequest(request, clazz, callback);
}
public static <T> void postRequest(String url, Map<String, String> params, final Class<T> clazz, final OnResponseCallback<T> callback) {
FormBody.Builder formBodyBuilder = new FormBody.Builder();
for (Map.Entry<String, String> entry : params.entrySet()) {
formBodyBuilder.add(entry.getKey(), entry.getValue());
}
RequestBody requestBody = formBodyBuilder.build();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
executeRequest(request, clazz, callback);
}
public static <T> void postRequest(String url, String json, final Class<T> clazz, final OnResponseCallback<T> callback) {
FormBody.Builder formBodyBuilder = new FormBody.Builder();
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
RequestBody requestBody = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(SpUtils.getStr(SpUtils.KEY_HTTP_BASE_URL, "") + url)
.post(requestBody)
.build();
executeRequest(request, clazz, callback);
}
public static <T> void postRequest(IRequest iRequest, final Class<T> clazz, final OnResponseCallback<T> callback) {
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
RequestBody requestBody = RequestBody.create(JSON, iRequest.toJson());
Request request = new Request.Builder()
.url(SpUtils.getStr(SpUtils.KEY_HTTP_BASE_URL, "") + iRequest.getApi())
.header("X-Access-Token", SpUtils.getStr(SpUtils.KEY_TOKEN, ""))
.post(requestBody)
.build();
executeRequest(request, clazz, callback);
}
public static <T> void getRequest(IRequest iRequest, final Type type, final OnResponseCallback<T> callback) {
String urlParams = OtherUtils.jsonToUrlParams(iRequest.toJson());
Request request = new Request.Builder()
.header("X-Access-Token", SpUtils.getStr(SpUtils.KEY_TOKEN, ""))
.url(SpUtils.getStr(SpUtils.KEY_HTTP_BASE_URL, "") + iRequest.getApi() + "?" + urlParams)
.build();
executeRequest(request, type, callback);
}
public static <T> void delRequest(IRequest iRequest, final Type type, final OnResponseCallback<T> callback) {
String urlParams = OtherUtils.jsonToUrlParams(iRequest.toJson());
Request request = new Request.Builder()
.header("X-Access-Token", SpUtils.getStr(SpUtils.KEY_TOKEN, ""))
.url(SpUtils.getStr(SpUtils.KEY_HTTP_BASE_URL, "") + iRequest.getApi() + "?" + urlParams)
.delete()
.build();
executeRequest(request, type, callback);
}
private static <T> void executeRequest(Request request, final Type type, final OnResponseCallback<T> callback) {
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
if (callback != null) {
callback.onFailure(e.getMessage());
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String json = response.body().string();
UIUtils.runOnUIThread(() -> {
BaseBean<T> baseBean = gson.fromJson(json, TypeToken.getParameterized(BaseBean.class, type).getType());
if (response.isSuccessful()) {
Log.i("网络请求", "请求地址: " + call.request().url());
Log.i("网络请求", "请求参数: " + GsonUtils.toJson(response.request().url()));
Log.i("网络请求", "响应数据: " + json);
try {
if (baseBean != null) {
if (baseBean.getCode() == 200) {
if (callback != null) {
callback.onSuccess(baseBean.getResult());
}
} else {
if (callback != null) {
callback.onFailure(baseBean.getMessage());
}
}
} else {
if (callback != null) {
callback.onFailure("解析失败");
}
}
} catch (JsonSyntaxException e) {
if (callback != null) {
callback.onFailure("解析异常");
}
}
} else {
if (callback != null) {
SpUtils.remove(SpUtils.KEY_TOKEN);
KLog.i("请求失败: " + json);
callback.onFailure("请求失败: " + baseBean.getMessage());
}
}
});
}
});
}
public static Type getListType(@NonNull final Type type) {
return TypeToken.getParameterized(List.class, type).getType();
}
public interface OnResponseCallback<T> {
void onSuccess(T result);
void onFailure(String errorMsg);
}
public static void postFile(String url, String path, Map<String, String> args, Callback callback) {
url = SpUtils.getStr(SpUtils.KEY_HTTP_BASE_URL, Constants.HTTP_BASE_URL) + "/ " + url;
OkHttpClient client = new OkHttpClient();
File file = new File(path);
// 创建一个RequestBody,封装文件和文件类型
RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
// 创建一个MultipartBody.Builder,设置请求类型为Multipart
MultipartBody.Builder builder = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", file.getName(), fileBody); // 添加文件
if (args != null) {
for (String key : args.keySet()) {
builder.addFormDataPart(key, args.get(key));
}
}
// 构建请求体
RequestBody requestBody = builder.build();
// 构建请求
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
// 发送请求
// 发送异步请求
client.newCall(request).enqueue(callback);
}
public interface DownloadListener {
void onDownloadSuccess(File file);
void onDownloadFailed(Exception e);
}
public static void downloadFile(String url, final String saveDir, final DownloadListener listener) {
Request request = new Request.Builder().url(url).build();
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
if (listener != null) {
listener.onDownloadFailed(e);
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
InputStream inputStream = null;
FileOutputStream fos = null;
try {
inputStream = response.body().byteStream();
File file = new File(saveDir, getFileName(url));
fos = new FileOutputStream(file);
byte[] buffer = new byte[2048];
int len;
while ((len = inputStream.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
fos.flush();
if (listener != null) {
listener.onDownloadSuccess(file);
}
} catch (IOException e) {
if (listener != null) {
listener.onDownloadFailed(e);
}
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
if (fos != null) {
fos.close();
}
} catch (IOException e) {
if (listener != null) {
listener.onDownloadFailed(e);
}
}
}
}
});
}
private static String getFileName(String url) {
return url.substring(url.lastIndexOf("/") + 1);
}
}
import com.google.gson.GsonBuilder;
public interface IRequest {
default String getApi() {
return "";
}
default String toJson() {
return new GsonBuilder().serializeNulls().create().toJson(this);
}
}
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.sv.sip.entity.BaseBean;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.Map;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class OkHttpUtils {
private static OkHttpClient client = new OkHttpClient();
private static Gson gson = new Gson();
public static <T> void getRequest(String url, Map<String, String> params, final Class<T> clazz, final OnResponseCallback<T> callback) {
HttpUrl.Builder urlBuilder = HttpUrl.parse(url).newBuilder();
if (params != null) {
for (Map.Entry<String, String> entry : params.entrySet()) {
urlBuilder.addQueryParameter(entry.getKey(), entry.getValue());
}
}
Request request = new Request.Builder()
.url(urlBuilder.build())
.build();
executeRequest(request, clazz, callback);
}
public static <T> void getRequest(String url, final Class<T> clazz, final OnResponseCallback<T> callback) {
Request request = new Request.Builder()
.url(url)
.build();
executeRequest(request, clazz, callback);
}
public static <T> void postRequest(String url, Map<String, String> params, final Class<T> clazz, final OnResponseCallback<T> callback) {
FormBody.Builder formBodyBuilder = new FormBody.Builder();
for (Map.Entry<String, String> entry : params.entrySet()) {
formBodyBuilder.add(entry.getKey(), entry.getValue());
}
RequestBody requestBody = formBodyBuilder.build();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
executeRequest(request, clazz, callback);
}
private static <T> void executeRequest(Request request, final Class<T> clazz, final OnResponseCallback<T> callback) {
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
if (callback != null) {
callback.onFailure(e.getMessage());
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
String json = response.body().string();
Type type = TypeToken.getParameterized(BaseBean.class, clazz).getType();
BaseBean<T> baseBean = gson.fromJson(json, type);
if (baseBean != null) {
if (baseBean.isStatus()) {
if (callback != null) {
callback.onSuccess(baseBean.getData());
}
} else {
if (callback != null) {
callback.onFailure(baseBean.getMsg_code());
}
}
} else {
if (callback != null) {
callback.onFailure("解析失败");
}
}
} else {
if (callback != null) {
callback.onFailure("请求失败");
}
}
}
});
}
public interface OnResponseCallback<T> {
void onSuccess(T data);
void onFailure(String errorMsg);
}
}