您的位置:首页 > 理论基础 > 计算机网络

封装OkHttp工具类

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

[b]1.  
[b]okhttp和handler结合
:[/b]
[/b]

       以下是需要的依赖: 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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  封装OkHttp工具类