Rxjava2+Retrofit2实践

Rxjava+Retrofit推荐文章:
http://www.jianshu.com/p/2b0aeb6b6b61/
http://www.jianshu.com/p/1fb294ec7e3b

导入对应的库

//需要的库
    compile 'io.reactivex.rxjava2:rxjava:2.1.3'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    //要求com.squareup.retrofit2:XXX:后面的版本一致这边用的是2.3.0
    compile 'com.squareup.retrofit2:retrofit:2.3.0'
    compile 'com.squareup.retrofit2:converter-jackson:2.3.0'
    compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'

遇到的第一个问题提示

Duplicate files copied in APK META-INF/LICENSE

1503369622484_3.png

解决方法

在android代码块中添加以下代码

android {
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
}

Interface文件

public interface NetService {
        //指定的是apiname如果没有apiname写成"."或"/"否则会报错
        `Missing either @GET URL or @Url parameter.`
        @GET("s")
        Observable getUserInfo(@Query("test") String p);
       // @Field 必须和@FormUrlEncode一起使用 ,@FormUrlEncode要和@POST一起使用
}

在代码中的使用

getService().getUserInfo("123")
                .subscribeOn(Schedulers.io())//在安卓中这个必须添加否则会报`NetworkOnMainThreadException`
                .observeOn(AndroidSchedulers.mainThread())//将结果回调到Main线程
                
                .subscribe(new Observer() {//rxjava1使用的是Subscriber这里使用的是Observer
            @Override
            public void onSubscribe(@NonNull Disposable d) {
                Log.e("MainActivity", "");
            }

            @Override
            public void onNext(@NonNull String s) {
                Log.e("MainActivity", s);
            }

            @Override
            public void onError(@NonNull Throwable e) {
                Log.e("MainActivity", "");
            }

            @Override
            public void onComplete() {
                Log.e("MainActivity", "");
            }
        });

getService中的代码

坑1:Could not locate call adapter for io.reactivex.Observable
坑2:Could not locate ResponseBody converter

    private NetService getService() {
        Retrofit retrofit = new Retrofit.Builder()
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//没有或添加错误会报`Could not locate call adapter for io.reactivex.Observable`异常
                .addConverterFactory(JacksonConverterFactory.create())//没有添加报Could not locate ResponseBody converter异常
                .baseUrl("http://www.baidu.com").build();
        NetService service = retrofit.create(NetService.class);
        return service;
    }

你可能感兴趣的:(Rxjava2+Retrofit2实践)