ok +拦截器

本文介绍了一个自定义OkHttp拦截器,用于添加User-Agent头部,并实现了一套基于OkHttp的HTTP请求工具类,包括GET和POST请求方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



    ---------------拦截器

public class LoggingInterceptor implements Interceptor {
    private static final String UA = "User-Agent";

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request()
                .newBuilder()
                .addHeader(UA, makeUA())
                .build();
        return chain.proceed(request);
    }

    private String makeUA() {
        String s = Build.BRAND + "/" + Build.MODEL + "/" + Build.VERSION.RELEASE;
        return Build.BRAND + "/" + Build.MODEL + "/" + Build.VERSION.RELEASE;
    }

}
-------------------------------httputils

public class HttpUtils {

    private OnNetListener onNetListener;
    private final OkHttpClient client;
    private final Handler handler;
    private static HttpUtils httpUtils;


    public HttpUtils() {
        client = new OkHttpClient
                .Builder()
                .addInterceptor(new LoggingInterceptor())
                .build();
        handler = new Handler(Looper.getMainLooper());
    }

    public static HttpUtils getInstance() {
        if (httpUtils == null) {
            synchronized (HttpUtils.class) {
                if (httpUtils == null) {
                    httpUtils = new HttpUtils();
                }
            }
        }
        return httpUtils;
    }


    public <T> void doGet(String url, final Class<T> clazz, final OnNetListener onNetListener) {
        Request request = new Request.Builder().url(url).build();
        client.newCall(request).enqueue(new Callback() {
            private String getString;

            @Override
            public void onFailure(Call call, IOException e) {

            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
                getString = response.body().string();
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        Gson gson = new Gson();
                        T t = gson.fromJson(getString, clazz);
                        onNetListener.onSuccess(t);
                    }
                });
            }
        });


    }


    public <T> void doPost(String url, Map<String, String> params, final Class<T> clazz, final OnNetListener onNetListener) {
        params.put("client", "android ");
        FormBody.Builder builder = new FormBody.Builder();
        if (params != null && params.size() > 0) {
            for (Map.Entry<String, String> entry : params.entrySet()) {
                builder.add(entry.getKey(), entry.getValue());
            }
        }
        FormBody formBody = builder.build();
        Request request = new Request.Builder().url(url).post(formBody).build();
        client.newCall(request).enqueue(new Callback() {

            private String string;

            @Override
            public void onFailure(Call call, IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {

                    }
                });

            }

            @Override
            public void onResponse(Call call, final Response response) throws IOException {
                string = response.body().string();
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        Gson gson = new Gson();
                        T t = gson.fromJson(string, clazz);
                        onNetListener.onSuccess(t);
                    }
                });


            }
        });

    }

}
------------------------------------   OnNetListener

public interface OnNetListener<T> {
    public void onSuccess(T t);

    public void onError(String str, int code);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值