android 网络框架封装,Rxandroid+Retrofit+okhttp封装网络框架

abd40e071b375750a2e9105f95b71723.png

1.封装OkHttp

public class HttpClient {

private static HttpClient instance;

private OkHttpClient.Builder builder;

private HttpClient() {

builder = new OkHttpClient.Builder()

.addInterceptor(new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {

@Override

public void log(String message) {

if (BuildConfig.DEBUG) {

Log.v("rretrofitLog==>>", message);

}

}

}).setLevel(HttpLoggingInterceptor.Level.BODY))

.writeTimeout(30, TimeUnit.SECONDS)

.connectTimeout(5, TimeUnit.SECONDS);

}

public static HttpClient getInstance() {

if (instance == null) {

synchronized (HttpClient.class) {

if (instance == null) {

instance = new HttpClient();

}

}

}

return instance;

}

public OkHttpClient.Builder getBuilder() {

return builder;

}

}

2.封装Retrofit

public class RetrofitClient {

private static RetrofitClient instance;

private Retrofit.Builder mRetrofitBuilder;

private OkHttpClient.Builder mOkhttpBuilder;

private RetrofitClient() {

mOkhttpBuilder = HttpClient.getInstance().getBuilder();

mRetrofitBuilder = new Retrofit.Builder()

.addCallAdapterFactory(RxJava2CallAdapterFactory.create())

.addConverterFactory(GsonConverterFactory.create())

.client(mOkhttpBuilder.build());

}

public static RetrofitClient getInstance() {

if (instance == null) {

synchronized (RetrofitClient.class) {

if (instance == null) {

instance = new RetrofitClient();

}

}

}

return instance;

}

public static String BaseURL = "接口的ip地址";

public Retrofit getRetrofit() {

return mRetrofitBuilder

.baseUrl(BaseURL)

.client(mOkhttpBuilder.build())

.build();

}

}

3.封装BaseResponse(根据自己的需求)

public class BaseResponse {

private int code;

private String msg;

public int getCode() {

return code;

}

public void setCode(int code) {

this.code = code;

}

public String getMsg() {

return msg;

}

public void setMsg(String msg) {

this.msg = msg;

}

}

4.封装BaseObserver

public abstract class BaseObserver implements Observer, ISubscriber {

private Toast mToast;

@Override

public void onSubscribe(Disposable d) {

doOnSubscribe(d);

}

@Override

public void onNext(T t) {

doOnNext(t);

}

@Override

public void onError(Throwable e) {

if (e instanceof SocketTimeoutException) {

setError("SocketTimeoutException");

} else if (e instanceof ConnectException) {

setError("ConnectException");

} else if (e instanceof UnknownHostException) {

setError("UnknownHostException");

} else {

String error = e.getMessage();

doOnError(error);

}

}

private void setError(String s) {

showToast(s);

doOnError(s);

doOnNetError();

}

private void doOnNetError() {

//弹框表明网络有问题

}

@Override

public void onComplete() {

doOnComplete();

}

private void showToast(String s) {

if (mToast == null) {

mToast = Toast.makeText(MyApp.getAppContext(), s, Toast.LENGTH_SHORT);

} else {

mToast.setText(s);

}

mToast.show();

}

}

public interface ISubscriber {

void doOnSubscribe(Disposable d);

void doOnError(String errorMsg);

void doOnNext(T t);

void doOnComplete();

}

5.封装接口

public interface ApiService {

ApiService instance = RetrofitClient.getInstance().getRetrofit().create(ApiService.class);

@POST("/user/login")

Observable login(@Query("username") String name,

@Query("password") String pwd);

}

在此之前,添加所需要的依赖

implementation 'io.reactivex.rxjava2:rxjava:2.2.4'

implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'

implementation 'com.squareup.retrofit2:retrofit:2.5.0'

implementation 'com.squareup.retrofit2:converter-gson:2.1.0'

implementation 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'

implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'//日志拦截器

测试效果

ApiService.instance

.login(name, pwd)

.subscribeOn(Schedulers.newThread())//上游线程

.observeOn(AndroidSchedulers.mainThread())//下游线程

.subscribe(new BaseObserver() {

@Override

public void doOnSubscribe(Disposable d) {

}

@Override

public void doOnNext(LoginBean baseResponse) {

int id = baseResponse.getData().getId();

Log.v("xd---", "" + id);

}

@Override

public void doOnError(String errorMsg) {

}

@Override

public void doOnComplete() {

}

});

本章是在学习 灵动_lee Rxjava2之后所总结,如若更多细节,可查阅 灵动_lee更多内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值