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<String> getUserInfo(@Query("test") String p);
       // @Field 必须和@FormUrlEncode一起使用 ,@FormUrlEncode要和@POST一起使用
}

在代码中的使用

getService().getUserInfo("123")
                .subscribeOn(Schedulers.io())//在安卓中这个必须添加否则会报`NetworkOnMainThreadException`
                .observeOn(AndroidSchedulers.mainThread())//将结果回调到Main线程
                
                .subscribe(new Observer<String>() {//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;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 网上关于Retrofit(这里指的是Retrofit2包里的Retrofit)的文章已经普天盖地了!为什么还要写这...
    Professioner阅读 1,917评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,263评论 25 709
  • 一 多少次,深夜的裂隙中总会回转那段你弥留时刻的记忆。病床边围着面目模糊的人们。整个梦境里,唯一清楚的只有那张挂着...
    约书亚阅读 10,939评论 2 12
  • 今天再看了阳志平的2篇文章,《我们为什么害怕学习》和《刻意练习——心智工具箱12》 《我们为什么害怕学习》这文是阳...
    wendy_zo阅读 3,262评论 0 0