OkHttp超级解析

//BaseCallBack

package com.bwie.asus.tabhost.okHttp;


import com.google.gson.internal.$Gson$Types;

import java.io.IOException;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

import okhttp3.Call;
import okhttp3.Request;
import okhttp3.Response;

/**
 * Created by asus on 2016/10/17.
 */

public abstract class BaseCallBack<T> {

    Type mType;
    //下面方法是把T转换为type对象
    static Type getSuperclassParameter(Class<?> subclass){
        Type superclass=subclass.getGenericSuperclass();
        if(superclass instanceof Class){
            throw new RuntimeException("Missing type parameter");

        }
        ParameterizedType parameterized= (ParameterizedType) superclass;
        return $Gson$Types.canonicalize(parameterized.getActualTypeArguments()[0]);
    }
    public BaseCallBack(){
        mType=getSuperclassParameter(getClass());
    }
    public abstract void onRequsetBefore(Request request);


    public abstract void onFailure(Call call, IOException e);

    public abstract void onSuccess( Response response ,T t) ;
    public abstract void onError( Response response,int code,Exception e) ;
}

//OkhttpHelper

package com.bwie.asus.tabhost.okHttp;

import android.os.Handler;
import android.os.Looper;

import com.google.gson.Gson;
import com.google.gson.JsonIOException;

import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;


import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

/**
 * Created by asus on 2016/10/17.
 */

public class OkhttpHelper {
    private static OkHttpClient okHttpClient;
    private Gson gson;
    private Handler handler;

    private OkhttpHelper() {
        //进行实例化
        okHttpClient=new OkHttpClient();
        okHttpClient.newBuilder().connectTimeout(10, TimeUnit.SECONDS)
                .readTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(10, TimeUnit.SECONDS)
        .build();
        gson=new Gson();
        handler=new Handler(Looper.getMainLooper());


    }

    ;

   public static OkhttpHelper getInstance() {
        return new OkhttpHelper();
    }

    //get请求方法
    public void get(String url, BaseCallBack callBack) {

        Request request = buildRequset(url, null, HttpMethodType.GET);
        doRequest(request, callBack);
    }

    //get请求方法
    public void post(String url, Map<String, String> params, BaseCallBack callBack) {
        Request request = buildRequset(url, params, HttpMethodType.GET);
        doRequest(request, callBack);
    }

    //请求方法
    public void doRequest(Request request, final BaseCallBack callBack) {
        callBack.onRequsetBefore(request);
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

                onFailure(call, e);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                if (response.isSuccessful()) {
                    //得到解析的字符串
                    String resultStr = response.body().string();
                    if (callBack.mType == String.class) {
                        callBack.onSuccess(response, resultStr);
                        callbackSuccess(callBack,response, resultStr);
                    } else {
                        try {
                            Object object = gson.fromJson(resultStr, callBack.mType);
                            callbackSuccess(callBack,response,object);

                        } catch (JsonIOException e) {
                            callBack.onError(response, response.code(), e);
                        }

                    }

                } else {
                    callBack.onError(response, response.code(), null);
                }
            }
        });
    }

    private Request buildRequset(String url, Map<String, String> params, HttpMethodType methodType) {

        Request.Builder builder = new Request.Builder();
        builder.url(url);
        //判断方法类型
        if (methodType == HttpMethodType.GET) {
            builder.get();
        } else if (methodType == HttpMethodType.POST) {
            RequestBody body = bulidFormData(params);
            builder.post(body);
        }
        return builder.build();
    }

    private RequestBody bulidFormData(Map<String, String> params) {
        FormBody.Builder bulider = new FormBody.Builder();
        if (params != null) {

            for (Map.Entry<String, String> entry : params.entrySet()) {
                bulider.add(entry.getKey(), entry.getValue());
            }
        }
        return bulider.build();
    }
    public void callbackSuccess(final BaseCallBack callback, final Response response, final Object object){
        handler.post(new Runnable() {
            @Override
            public void run() {
                callback.onSuccess(response,object);
            }
        });
    }

    enum HttpMethodType {
        GET,
        POST
    }
}

//调用

//设置adapter
OkhttpHelper.getInstance().get(path, new BaseCallBack<DataBean>() {
    @Override
    public void onRequsetBefore(Request request) {

    }

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

    }

    @Override
    public void onSuccess(Response response,DataBean dataBean) {
        List<Data> list = dataBean.data;
        mRecyclerView.setAdapter(mAdapter = new HomeAdapter(list));
    }


    @Override
    public void onError(Response response, int code, Exception e) {

    }
});

OkHttp.getAsync(path,new OkHttp.DataCallBack() {


    @Override
    public void requestFailure(Request request, IOException e) {

    }

猜你喜欢

转载自blog.csdn.net/qq_35853814/article/details/53151070
今日推荐