Retrofit+Rxjava完成网络请求

最近的一个项目上用的是这个联网,用起来挺方便的,而且代码管理上很方便。我用的是studio首先在grade里添加
compile ‘com.squareup.retrofit2:retrofit:2.3.0’
compile ‘com.squareup.retrofit2:converter-gson:2.3.0’
compile ‘com.squareup.retrofit2:adapter-rxjava2:2.3.0’
compile ‘com.squareup.okhttp3:logging-interceptor:3.6.0’
compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’
compile ‘io.reactivex.rxjava2:rxjava:2.0.7’
代码如下
public class RetrofitHelper {

private static final String BASE_URL = "Host网址";

//okhttp客户端对象
private static OkHttpClient mOkHttpClient;

static {
    //这里首先执行
    initOkhttp();
}

//初始化okhttp客户端,synchronized为了保证单例
private static void initOkhttp() {
    if (mOkHttpClient == null) {
        synchronized (RetrofitHelper.class) {
            if (mOkHttpClient == null) {
                OkHttpClient.Builder builder = new OkHttpClient.Builder();
                mOkHttpClient = builder
                        .retryOnConnectionFailure(true)     //连接失败时自动重连
                        .connectTimeout(10, TimeUnit.SECONDS)   //设置连接网络超时时间,单位是秒
                        .readTimeout(20, TimeUnit.SECONDS)  //读取数据超时时间
                        .writeTimeout(20, TimeUnit.SECONDS)//写入数据超时时间
                        .build();           //缓存和拦截器如果没有需求就不用添加
            }
        }
    }
}

public static MaYiApiService getApiService() {
    Retrofit retrofit = new Retrofit.Builder().addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .client(mOkHttpClient)  //传okhttp客户端
            .baseUrl(BASE_URL)  //传ip地址
            .build();
    return retrofit.create(MaYiApiService.class);
}

再封装下接口类就可以使用了,可能有些联网请求需要加上Header,如果用拦截器的话每个联网都带上了header,跟我的
需求不符,我自己手动添加的,有需要加头的自己写个拦截器就好了

下面是我写的接口类:
public interface WXApiService {

@GET("cgi-bin/token")
Flowable<WxTokenBean> getWxtoken(@Query("grant_type") String grant_type,
                                 @Query("appid") String appid,
                                 @Query("secret") String secret);

}

项目中使用
protected CompositeDisposable mDisposable = new CompositeDisposable();
protected WXApiService mWXApiService = RetrofitHelper.getApi();

                        mDisposable.add(mWXApiService.getWxMessage(mToken,body).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
                        .subscribe(new Consumer<ResponseBody>(){
                            @Override
                            public void accept(@NonNull ResponseBody responseBody) throws Exception {
                         Log.i("msg","成功");
                            }
                        }, new Consumer<Throwable>() {
                            @Override
                            public void accept(@NonNull Throwable throwable) throws Exception {
                            Log.i("msg","失败");
                            }
                        }));

猜你喜欢

转载自blog.csdn.net/guldanhu/article/details/78709544