OkHttpUtils请求回调封装


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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值