Okhttp的封装和回调

public class HttpUtil {
    static HttpUtil util;
    private final OkHttpClient client;

//  私有化构造方法
    private HttpUtil(){
        client = new OkHttpClient();
    }

    public static HttpUtil getInstance(){
        if(util == null){
            synchronized (HttpUtil.class){
                util = new HttpUtil();
            }
        }

        return util;
    }


public void httRequest(String url,final HttpRespon respon) { Request request = new Request.Builder() .url(url) .build(); client.newCall(request).enqueue(new Callback() { // 请求失败 @Override public void onFailure(Call call, IOException e) { e.printStackTrace(); respon.onError("请求网络失败"); } // 有响应 @Override public void onResponse(Call call, Response response) throws IOException { if (!response.isSuccessful()) { respon.onError("请求网络失败"); } // 获取响应body String json = response.body().string(); // 解析Json respon.parse(json); } }); } }

定义的回调接口:

public abstract class HttpRespon<T> {
    //http返回的类型的泛型
    Class<T> t;

    public HttpRespon(Class<T> t){
        this.t = t;
    }

//  请求失败时,回调的方法
    public abstract void onError(String msg);
//  请求成功时,回调的方法
    public abstract void onSuccess(T t);

    public void parse(String json){
        if(TextUtils.isEmpty(json)){
            //请求失败
            onError("连接网络失败");
            return;
        }
        if(t == String.class){
            onSuccess((T) json);
            return;
        }

        T result = JsonUtil.parse(json, this.t);
        if(result == null){
            onError("Json解析失败");
        }else{
            onSuccess(result);
        }
    }
}

 调用的事例:

            HttpUtil.getInstance().httRequest(Constant.SPLASH_URL, new HttpRespon<Ad>(Ad.class) {
                @Override
                public void onError(String msg) {
                    Log.i("fjl", msg);
                }

                @Override
                public void onSuccess(Ad ad) {
                    Intent intent = new Intent();
                    intent.setClass(AdsActivity.this, AdDownloadService.class);
                    intent.putExtra(AdDownloadService.AD_DATA, ad);
                    startService(intent);
                }
            });

 

posted @ 2018-04-09 18:30  Kliver  阅读(468)  评论(0编辑  收藏  举报