Okhttp工具类+拦截器+使用方法

在model的build里 导入okhttp依赖

implementation ‘com.squareup.okhttp3:okhttp:3.2.0’

这是okhttp工具类完整代码 ,需要的同学直接创建一个新的Class 全部粘贴进去即可

import android.os.Handler;
import android.os.Message;
import android.support.annotation.NonNull;
import android.util.Log;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;


public class OkHttpUtils {
private HttpListener listener;
private final int HTTP_SUCCESS =100 ; 
private final int HTTP_ERROR = 101;
//封装handler  重写handleMessage方法
private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what) {
            case HTTP_SUCCESS://成功
                String data = (String) msg.obj;
                listener.success(data);
                break;
            case HTTP_ERROR://失败
                String error = (String) msg.obj;
                listener.fail(error);
                break;
        }
    }
};


//添加网络拦截器
@NonNull
private OkHttpClient getOkHttpClient() throws IOException {
    return new OkHttpClient.Builder().
            addNetworkInterceptor(new Interceptor() {
                @Override
                public Response intercept(Chain chain) throws IOException {
                    Request request = chain.request();//拦截
                    String mehod = request.method();//请求类型
                    String host = request.url().host();//接口域名
                    Log.i("intercept", mehod + "==" + host);
//                    	    Response proceed = chain.proceed(request);
                    return chain.proceed(request);//返回Response
                }
            }).build();

    //添加应用拦截器
    //                addInterceptor(new Interceptor() {
    //                    @Override
    //                    public Response intercept(Chain chain) throws IOException {
    //                        Request request = chain.request();
    //                        String mehod = request.method();
    //                        String host = request.url().host();
    //                        Log.i("intercept", mehod + "==" + host);
//                                  Response proceed = chain.proceed(request);
    //                        return chain.proceed(request); //返回Response
    //                    }
    //                }).
    //                build();
}

private void doCall(Call call) throws IOException {
    final Message message = Message.obtain();
    call.enqueue(new Callback() {
        //失败方法
        @Override
        public void onFailure(Call call, IOException e) {
            message.what = HTTP_ERROR;
            message.obj = e.getMessage();
            handler.sendMessage(message);
        }
        //成功方法
        @Override
        public void onResponse(Call call, Response response) throws IOException {
            message.what = HTTP_SUCCESS;//标识
            message.obj = response.body().string();//对象
            handler.sendMessage(message);//发送消息
        }
    });
}

//get请求
public OkHttpUtils get(String url) {
    try {
        OkHttpClient client = getOkHttpClient();
        Request request = new Request.Builder()
                .url(url)
                .build();
        Call call = client.newCall(request);
        doCall(call);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return this;
}

//post请求
public OkHttpUtils post(String url, RequestBody body) {
    try {
        OkHttpClient client = getOkHttpClient();
        Request request = new Request.Builder()
                .post(body)
                .url(url)
                .build();
        Call call = client.newCall(request);
        doCall(call);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return this;
}


//接口回调
public void result(HttpListener listener) {
    this.listener = listener;
}

//定义接口
public interface HttpListener {
    void success(String data);
    void fail(String error);
}
}

使用方法

请求GET

new OkHttpUtils().get(url).result(new OkHttpUtils.HttpListener() {
        @Override
        public void success(String data) {
            Log.i(TAG,"成功"+data);
        }

        @Override
        public void fail(String error) {
         Log.i(TAG,"失败"+error);
        }
    });

请求POST

   //实例化一个RequestBody的子类添加我们要请求的参数
    FormBody.Builder builder = new FormBody.Builder();
    //若干个string参数
     builder.add("aa","aa");
     builder.add("bb","bb");
    RequestBody body = builder.build();
    
    new OkHttpUtils().post(url,body).result(new OkHttpUtils.HttpListener() {
        @Override
        public void success(String data) {
              Log.i(TAG,"成功"+data);
        }
        @Override
        public void fail(String error) {
             Log.i(TAG,"失败"+error);
        }
    });
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值