2017-01-24 111 views
2

API時,我有調用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(); 
} 

阿比

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); 

最後的地方,我打電話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: "); 
       } 
      }); 

結果即時得到404 - 有當我打電話API不RxJava沒有問題。有人可以告訴我什麼是錯的或爲什麼我得到這樣的錯誤?

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

你能分享你調用的網址是什麼?它是否在curl中返回有效值? – ditn

+0

我無法分享網址,但正如我所提到的,當我不使用rx時,我沒有問題,因爲郵遞員也沒有問題。 – Robert

+0

包含一個[日誌攔截器](https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor)並檢查是否調用了正確的url。 – nhaarman

回答

0

目前尚不清楚對我來說,但如果這個問題是不是在不同的HTTP rsponses,但在不同的行爲(得到觸發的onError與改造2 RxJava代替onNext 401響應),那麼它的工作原理與設計。

您需要分析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); 
    } 
} 

早些時候,我answerd幾乎簡單kotlin例子,更多的解釋在這裏同樣的問題: https://stackoverflow.com/a/45868252/1824898

相關問題