Android 404-使用RXJava2和RXJava2调用API时
我在使用下面提到的libs调用API时遇到问题 我的依赖项:Android 404-使用RXJava2和RXJava2调用API时,android,retrofit2,rx-android,rx-java2,Android,Retrofit2,Rx Android,Rx Java2,我在使用下面提到的libs调用API时遇到问题 我的依赖项: compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' com
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
提供改装实例的代码
@Provides
@Singleton
RxJava2CallAdapterFactory provideRxJavaCallAdapter(){
return RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io());
}
@Provides
@Singleton
Retrofit provideRetrofit(Gson gson, OkHttpClient okHttpClient, RxJava2CallAdapterFactory rxJavaCallAdapterFactory){
return new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(rxJavaCallAdapterFactory)
.client(okHttpClient)
.build();
}
Api接口
@GET("form/{slugOrUUID}")
Observable<CoreObject> getForumRx(@Path("slugOrUUID") String slugOrUUID);
我不清楚,但如果问题不在不同的HTTP响应中,而是在不同的行为中(在改型2 RxJava中使用401响应而不是onNext触发onError),那么它就可以按设计工作 您需要分析
Exception
的类,该类进入onError
处理程序
@Override
public void onError(Throwable e) {
if(e instanceof HttpException) {
// Cast e to HttpException and do what you need to
} else {
// This is another exception, like invalid JSON, etc.
Log.e(TAG, "onError: ", e);
}
}
早些时候,我用简单的kotlin
示例回答了几乎相同的问题,并在这里进行了更多解释:
我希望这会对某人有所帮助。我浪费了很多时间。这基本上是玩这个游戏的HTTPs请求的响应码
请参考以下内容:您能分享您呼叫的URL吗?它在curl中是否返回有效值?我无法共享URL,但正如我提到的,当我不使用rx时,我没有问题,而且邮递员对此也没有问题。包括a并检查是否调用了正确的URL。投票关闭,因为这是一个无法再复制的问题,或者是由简单的印刷引起的error.photography.subscribeOn(Schedulers.io())是冗余的,您已经使用此调度器创建了RxJava2CallAdapterFactory。尝试添加更多详细信息。
com.jakewharton.retrofit2.adapter.rxjava2.HttpException: HTTP 404
at com.jakewharton.retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:54)
at com.jakewharton.retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)
at com.jakewharton.retrofit2.adapter.rxjava2.CallObservable.subscribeActual(CallObservable.java:43)
at io.reactivex.Observable.subscribe(Observable.java:10179)
at com.jakewharton.retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)
at io.reactivex.Observable.subscribe(Observable.java:10179)
at io.reactivex.internal.operators.observable.ObservableSubscribeOn$1.run(ObservableSubscribeOn.java:39)
at io.reactivex.Scheduler$1.run(Scheduler.java:134)
at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:59)
at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:51)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
@Override
public void onError(Throwable e) {
if(e instanceof HttpException) {
// Cast e to HttpException and do what you need to
} else {
// This is another exception, like invalid JSON, etc.
Log.e(TAG, "onError: ", e);
}
}