2017-01-24 13 views
2

とのAPIを呼び出すときに私が言及したLIBSとAPIを呼び出すことに問題がある404 - Retrofit2とRXJava2

私の依存関係を怒鳴る:改造インスタンス

@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を提供し

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' 

コードをインタフェース

@GET("form/{slugOrUUID}") 
Observable<CoreObject> getForumRx(@Path("slugOrUUID") String slugOrUUID); 
私は結果イムは404を取得したようREST

ForumService forumService = retrofit.create(ForumService.class); 

    Observable<CoreObject> photography = forumService.getForumRx("sample"); 

    photography.subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Observer<CoreObject>() { 
       @Override 
       public void onSubscribe(Disposable d) { 
        Log.i(TAG, "onSubscribe: "); 
       } 

       @Override 
       public void onNext(CoreObject value) { 
        Log.i(TAG, "onNext: "); 
       } 

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

       @Override 
       public void onComplete() { 
        Log.i(TAG, "onComplete: "); 
       } 
      }); 

を呼んでいるところ

そして最後には置く - 私はRxJavaせずにAPIを呼んでいる問題はありません。誰が何が間違っているのか、なぜ私はそのようなエラーが出ているのですか?

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) 
+0

はあなたが呼び出しているURLを共有することができます:

@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例と多くの説明とほぼ同じ質問を返事しましたか?それはカールで有効な値を返しますか? – ditn

+0

私はURLを共有することはできませんが、私が言及したように、私はrxを使っていないときに問題はなく、Postmanにも問題はありません。 – Robert

+0

[logging interceptor](https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor)を含めて、正しいURLが呼び出されているかどうかを確認してください。 – nhaarman

答えて

0

は、それは私のために明らかではないが、問題は別のHTTP rsponsesではありませんが、別の行動に(代わりにonNextのレトロフィット2 RxJavaで401応答でのonErrorトリガー取得)場合、それは設計どおりに動作します。

onErrorハンドラになるExceptionのクラスを分析する必要があります。 https://stackoverflow.com/a/45868252/1824898

関連する問題