封装的OkHttpUtils,拦截器,gsonutils类,解绑(防止内内存泄漏)

OkHttpUtils类

 //定义静态变量
    private static volatile OkHttpUtils instance=null;
    private final OkHttpClient okHttpClient;
    private Handler handler=new Handler();

    //定义构造方法
    private OkHttpUtils()
    {
        //拦截器
        okHttpClient = new OkHttpClient().newBuilder()
                .addInterceptor(new Logger())
                .build();
    }
    //定义静态的方法创建这个类
    public static OkHttpUtils getInstance(){
        if(null==instance){
            synchronized (OkHttpUtils.class){
                if (instance==null){
                    instance=new OkHttpUtils();
                }
            }
        }
        return instance;
    }
    //定义get的请求方式
    public void doGet(String url, HashMap map, final CallBack callBack){
        StringBuilder sb=null;
        if (map.size() == 0) {
            if (null == sb) {
                sb = new StringBuilder();
                sb.append(url);
            }
        }else{
            for(String key:map.keySet()){
                if(sb==null){
                    sb=new StringBuilder();
                    sb.append("?");
                }else{
                    sb.append("&");
                }
                sb.append(key).append("=").append(map.get(key));
            }
        }
        Request request=new Request.Builder()
                .url(url+sb.toString())
                .get()
                .build();
        Call call = okHttpClient.newCall(request);
        //异步请求数据
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        callBack.onFailure(e.getMessage());
                    }
                });

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String str = response.body().string();
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        callBack.onSuccess(str);
                    }
                });
            }
        });


    }
    //定义post的请求方式
    public void doPost(String url, HashMap map, final CallBack callBack){
        //构建请求参数
        FormBody.Builder bodyBuilder = new FormBody.Builder();
        for (String key : map.keySet()) {
            bodyBuilder.add(key,map.get(key));
        }
        FormBody body =  bodyBuilder.build();
        Request request=new Request.Builder()
                .url(url)
                .post(body)
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        callBack.onFailure(e.getMessage());
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String str = response.body().string();
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        callBack.onSuccess(str);
                    }
                });
            }
        });
    }
拦截器:Logger类

public class Logger implements Interceptor {
    private Request request;
    private Request original;

    @Override
    public Response intercept(Chain chain) throws IOException {
        original = chain.request();
            //取出原始数据
            HttpUrl url=original.url().newBuilder()
                    .addQueryParameter("source","android")
                    .build();
            //添加请求头
            request = original.newBuilder()
                    .url(url)
                    .build();
        return chain.proceed(request);
    }
}
//定义接口

public interface CallBack {
    void onSuccess(Object o);
    void  onFailure(String msg);
}
//创建一个Gson类

public class GsonUtils {
    private  static Gson gson;
    public static Gson getInstance(){
        if (null==gson){
            gson=new Gson();
        }
        return gson;
    }
}

p层里加入的

 //防止内存泄漏
    public void detatch(){
        if (dView != null) {
            dView = null;
        }
    }
v层里,重写ondestory方法

//防止内存泄漏
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (detailPresenter != null) {
            detailPresenter.detatch();
        }
    }






你可能感兴趣的:(封装的OkHttpUtils,拦截器,gsonutils类,解绑(防止内内存泄漏))