封装OkHttp工具类

来源:互联网 发布:淘宝丝袜买家秀 编辑:程序博客网 时间:2024/05/17 09:34

      OkHttp的返回数据在子线程,所以经常用到Handler去结合使用,使我们的代码特别多,看起来特别乱,所以我就封装了一下,使得我们使用时获得的数据在主线程中,我封装了两种形式,一种是okhttp和handler结合,一种是okhttp和Rxjava结合,希望能够帮到大家。

1.  okhttp和handler结合

       以下是需要的依赖:

        compile 'com.squareup.okhttp3:okhttp:3.9.0'        compile 'com.squareup.okio:okio:1.13.0'

           首先说一下怎么使用吧:

OkHttpUtils.getInstance().doGet("http://news-at.zhihu.com/api/4/news/latest",callback);
   废话不多说,上工具类:
public abstract class OnUiCallback implements Callback {    public abstract void onFailed(String eStr);    public abstract void onSuccess(String result);    private Observer observer=new Observer<String>() {        @Override        public void onCompleted() {        }        @Override        public void onError(Throwable e) {            onFailed("");        }        @Override        public void onNext(String o) {            onSuccess(o);        }    };    @Override    public void onFailure(Call call, IOException e) {        String eStr=e.getMessage();        Observable.just(eStr).subscribe(observer);    }    @Override    public void onResponse(Call call, Response response) throws IOException {        String result=response.body().string();        Observable.just(result).observeOn(AndroidSchedulers.mainThread()).subscribe(observer);    }}

public class OkHttpUtils {    private static OkHttpUtils okHttpUtils=new OkHttpUtils();    private OkHttpUtils(){};    public static OkHttpUtils getInstance(){        return okHttpUtils;    }    private OkHttpClient client;    private void initOkHttpClient(){        if (client==null){            client=new OkHttpClient.Builder().build();        }    }    public void doGet(String path, Callback callback){        initOkHttpClient();        Request request=new Request.Builder().url(path).build();        client.newCall(request).enqueue(callback);    }}

 2.   okhttp和Rxjava结合:

        加上Rxjava的依赖:

         compile 'io.reactivex:rxjava:1.0.14' compile 'io.reactivex:rxandroid:1.0.1'
使用方式:
        OkHttpUtils.getInstance().doGet("", new OnUiCallback() {            @Override            public void onFailed(String eStr) {                //失败            }            @Override            public void onSuccess(String result) {                //成功            }        });

public class OkHttpUtils {    private static OkHttpUtils okHttpUtils=new OkHttpUtils();    private OkHttpUtils(){};    public static OkHttpUtils getInstance(){        return okHttpUtils;    }    private OkHttpClient client;    private void initOkHttpClient(){        if (client==null){            client=new OkHttpClient.Builder().build();        }    }    public void doGet(String path, Callback callback){        initOkHttpClient();        Request request=new Request.Builder().url(path).build();        client.newCall(request).enqueue(callback);    }}

public abstract class OnUiCallback implements Callback {    public abstract void onFailed(String eStr);    public abstract void onSuccess(String result);    private Observer observer=new Observer<String>() {        @Override        public void onCompleted() {        }        @Override        public void onError(Throwable e) {            onFailed("");        }        @Override        public void onNext(String o) {            onSuccess(o);        }    };    @Override    public void onFailure(Call call, IOException e) {        String eStr=e.getMessage();        Observable.just(eStr).subscribe(observer);    }    @Override    public void onResponse(Call call, Response response) throws IOException {        String result=response.body().string();        Observable.just(result).observeOn(AndroidSchedulers.mainThread()).subscribe(observer);    }}



原创粉丝点击