关于RxJava2和retrofit2使用的问题

时间:2022-04-10 17:50:39
在retrofit2配合使用rxjava时候,出现了如下问题:
   java.lang.IllegalArgumentException: Unable to create call adapter for io.reactivex.Observable<com.price.take_new.Example> for method NewsService.getUser

依赖:
    compile 'io.reactivex.rxjava2:rxjava:2.0.4'
    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    compile 'com.squareup.okhttp3:okhttp:3.5.0'
    compile 'com.google.code.gson:gson:2.8.0'

    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
    compile 'com.squareup.retrofit2:converter-gson:2.1.0'

这是我的代码:
Retrofit retrofit = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .baseUrl("http://takeapp.com.cn/Home/register/")
                .build();
        NewsService api = retrofit.create(NewsService .class);
        api.getUser("13222222222",MD5Tool.md5("123")).subscribeOn(Schedulers.io()).
                observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Example>() {
            @Override
            public void accept(Example example) throws Exception {
                Log.e(TAG,"TEST");
            }
        });

接口代码:
Observable<Example> getUser(@Field("phone_num") String username,@Field("password") String password);

求解决办法~

16 个解决方案

#1


你用的是POST请求吧

#2


引用 1 楼 u013290250 的回复:
你用的是POST请求吧

对的,请问你能告诉我原因吗?

#3


引用 2 楼 qq_36440137 的回复:
Quote: 引用 1 楼 u013290250 的回复:

你用的是POST请求吧

对的,请问你能告诉我原因吗?

 @FormUrlEncoded
    @POST("user-login/login")
    Observable<LoginModel> loginData(@Field("username") String username, @Field("password") String password);
应该是少了这两个注解

#4


引用 3 楼 u013290250 的回复:
Quote: 引用 2 楼 qq_36440137 的回复:

Quote: 引用 1 楼 u013290250 的回复:

你用的是POST请求吧

对的,请问你能告诉我原因吗?

 @FormUrlEncoded
    @POST("user-login/login")
    Observable<LoginModel> loginData(@Field("username") String username, @Field("password") String password);
应该是少了这两个注解

已经加上了,并不行

#5


引用 4 楼 qq_36440137 的回复:
Quote: 引用 3 楼 u013290250 的回复:

Quote: 引用 2 楼 qq_36440137 的回复:

Quote: 引用 1 楼 u013290250 的回复:

你用的是POST请求吧

对的,请问你能告诉我原因吗?

 @FormUrlEncoded
    @POST("user-login/login")
    Observable<LoginModel> loginData(@Field("username") String username, @Field("password") String password);
应该是少了这两个注解

已经加上了,并不行

那应该就是你的写法有问题,建议再去看看别人怎么写的

#6


引用 5 楼 u013290250 的回复:
Quote: 引用 4 楼 qq_36440137 的回复:

Quote: 引用 3 楼 u013290250 的回复:

Quote: 引用 2 楼 qq_36440137 的回复:

Quote: 引用 1 楼 u013290250 的回复:

你用的是POST请求吧

对的,请问你能告诉我原因吗?

 @FormUrlEncoded
    @POST("user-login/login")
    Observable<LoginModel> loginData(@Field("username") String username, @Field("password") String password);
应该是少了这两个注解

已经加上了,并不行

那应该就是你的写法有问题,建议再去看看别人怎么写的

我想说我就是按照别人的教程一步步写的,但还是谢谢你

#7


引用 6 楼 qq_36440137 的回复:
Quote: 引用 5 楼 u013290250 的回复:

Quote: 引用 4 楼 qq_36440137 的回复:

Quote: 引用 3 楼 u013290250 的回复:

Quote: 引用 2 楼 qq_36440137 的回复:

Quote: 引用 1 楼 u013290250 的回复:

你用的是POST请求吧

对的,请问你能告诉我原因吗?

 @FormUrlEncoded
    @POST("user-login/login")
    Observable<LoginModel> loginData(@Field("username") String username, @Field("password") String password);
应该是少了这两个注解

已经加上了,并不行

那应该就是你的写法有问题,建议再去看看别人怎么写的

我想说我就是按照别人的教程一步步写的,但还是谢谢你

问题解决了吗?你把教程地址贴一下,我去瞅瞅

#8


关于RxJava2和retrofit2使用的问题

#9


楼主这个问题解决了吗,我也遇到了!!

#10


 你使用了 rxjava2, compile 'io.reactivex.rxjava2:rxjava:2.0.4'
但是retrofit2一开始是基于rxjava开发的适配器即adapter-rxjava,这个适配器只适合rxjava
如果想使用rxjava2就得使用adapter-rxjava2适配器
这个适配器有两个,一个是retrofit2官方设计的(上线不久),另外一个就是jakewharton大神弄出来的retrofit2-rxjava2-adapter适配器

#11


引用 9 楼 a3100293282 的回复:
楼主这个问题解决了吗,我也遇到了!!


你使用了 rxjava2, compile 'io.reactivex.rxjava2:rxjava:2.0.4'
但是retrofit2一开始是基于rxjava开发的适配器即adapter-rxjava,这个适配器只适合rxjava
如果想使用rxjava2就得使用adapter-rxjava2适配器
这个适配器有两个,一个是retrofit2官方设计的(上线不久),另外一个就是jakewharton大神弄出来的retrofit2-rxjava2-adapter适配器

#12


引用 11 楼 ai_1018460118 的回复:
Quote: 引用 9 楼 a3100293282 的回复:

楼主这个问题解决了吗,我也遇到了!!


你使用了 rxjava2, compile 'io.reactivex.rxjava2:rxjava:2.0.4'
但是retrofit2一开始是基于rxjava开发的适配器即adapter-rxjava,这个适配器只适合rxjava
如果想使用rxjava2就得使用adapter-rxjava2适配器
这个适配器有两个,一个是retrofit2官方设计的(上线不久),另外一个就是jakewharton大神弄出来的retrofit2-rxjava2-adapter适配器

我找到了这个retrofit2-rxjava2-adapter,这是正解。

#13


哥们,问题处理了么,我也出现了这样的问题

#14


大兄弟,你的问题解决了吗,我也出现了这样的问题

#15


    compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0' //适配器

#16


引用
#15 
       compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'  正解。。。   感谢兄弟!

#1


你用的是POST请求吧

#2


引用 1 楼 u013290250 的回复:
你用的是POST请求吧

对的,请问你能告诉我原因吗?

#3


引用 2 楼 qq_36440137 的回复:
Quote: 引用 1 楼 u013290250 的回复:

你用的是POST请求吧

对的,请问你能告诉我原因吗?

 @FormUrlEncoded
    @POST("user-login/login")
    Observable<LoginModel> loginData(@Field("username") String username, @Field("password") String password);
应该是少了这两个注解

#4


引用 3 楼 u013290250 的回复:
Quote: 引用 2 楼 qq_36440137 的回复:

Quote: 引用 1 楼 u013290250 的回复:

你用的是POST请求吧

对的,请问你能告诉我原因吗?

 @FormUrlEncoded
    @POST("user-login/login")
    Observable<LoginModel> loginData(@Field("username") String username, @Field("password") String password);
应该是少了这两个注解

已经加上了,并不行

#5


引用 4 楼 qq_36440137 的回复:
Quote: 引用 3 楼 u013290250 的回复:

Quote: 引用 2 楼 qq_36440137 的回复:

Quote: 引用 1 楼 u013290250 的回复:

你用的是POST请求吧

对的,请问你能告诉我原因吗?

 @FormUrlEncoded
    @POST("user-login/login")
    Observable<LoginModel> loginData(@Field("username") String username, @Field("password") String password);
应该是少了这两个注解

已经加上了,并不行

那应该就是你的写法有问题,建议再去看看别人怎么写的

#6


引用 5 楼 u013290250 的回复:
Quote: 引用 4 楼 qq_36440137 的回复:

Quote: 引用 3 楼 u013290250 的回复:

Quote: 引用 2 楼 qq_36440137 的回复:

Quote: 引用 1 楼 u013290250 的回复:

你用的是POST请求吧

对的,请问你能告诉我原因吗?

 @FormUrlEncoded
    @POST("user-login/login")
    Observable<LoginModel> loginData(@Field("username") String username, @Field("password") String password);
应该是少了这两个注解

已经加上了,并不行

那应该就是你的写法有问题,建议再去看看别人怎么写的

我想说我就是按照别人的教程一步步写的,但还是谢谢你

#7


引用 6 楼 qq_36440137 的回复:
Quote: 引用 5 楼 u013290250 的回复:

Quote: 引用 4 楼 qq_36440137 的回复:

Quote: 引用 3 楼 u013290250 的回复:

Quote: 引用 2 楼 qq_36440137 的回复:

Quote: 引用 1 楼 u013290250 的回复:

你用的是POST请求吧

对的,请问你能告诉我原因吗?

 @FormUrlEncoded
    @POST("user-login/login")
    Observable<LoginModel> loginData(@Field("username") String username, @Field("password") String password);
应该是少了这两个注解

已经加上了,并不行

那应该就是你的写法有问题,建议再去看看别人怎么写的

我想说我就是按照别人的教程一步步写的,但还是谢谢你

问题解决了吗?你把教程地址贴一下,我去瞅瞅

#8


关于RxJava2和retrofit2使用的问题

#9


楼主这个问题解决了吗,我也遇到了!!

#10


 你使用了 rxjava2, compile 'io.reactivex.rxjava2:rxjava:2.0.4'
但是retrofit2一开始是基于rxjava开发的适配器即adapter-rxjava,这个适配器只适合rxjava
如果想使用rxjava2就得使用adapter-rxjava2适配器
这个适配器有两个,一个是retrofit2官方设计的(上线不久),另外一个就是jakewharton大神弄出来的retrofit2-rxjava2-adapter适配器

#11


引用 9 楼 a3100293282 的回复:
楼主这个问题解决了吗,我也遇到了!!


你使用了 rxjava2, compile 'io.reactivex.rxjava2:rxjava:2.0.4'
但是retrofit2一开始是基于rxjava开发的适配器即adapter-rxjava,这个适配器只适合rxjava
如果想使用rxjava2就得使用adapter-rxjava2适配器
这个适配器有两个,一个是retrofit2官方设计的(上线不久),另外一个就是jakewharton大神弄出来的retrofit2-rxjava2-adapter适配器

#12


引用 11 楼 ai_1018460118 的回复:
Quote: 引用 9 楼 a3100293282 的回复:

楼主这个问题解决了吗,我也遇到了!!


你使用了 rxjava2, compile 'io.reactivex.rxjava2:rxjava:2.0.4'
但是retrofit2一开始是基于rxjava开发的适配器即adapter-rxjava,这个适配器只适合rxjava
如果想使用rxjava2就得使用adapter-rxjava2适配器
这个适配器有两个,一个是retrofit2官方设计的(上线不久),另外一个就是jakewharton大神弄出来的retrofit2-rxjava2-adapter适配器

我找到了这个retrofit2-rxjava2-adapter,这是正解。

#13


哥们,问题处理了么,我也出现了这样的问题

#14


大兄弟,你的问题解决了吗,我也出现了这样的问题

#15


    compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0' //适配器

#16


引用
#15 
       compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'  正解。。。   感谢兄弟!