2017-08-10 17 views
0

我正在嘗試做一個示例Rxjava-Retrofit應用程序。我有獲取從OpenWeatherMapRx-Java Retrofit沒有得到任何迴應

我改造的API接口看起來像這樣

public interface ApiInterface { 
    @GET("data/2.5/weather?appid=11111111111") 
    Observable<WeatherData> getWeather(@Query("q") String place); 
} 

用戶在編輯文本鍵入地名用戶輸入的位置的天氣信息的API,基於輸入地名我會打電話給API。這裏是我的整個代碼

BehaviorSubject<String> mStringSubject = BehaviorSubject.create(); 

@Override 
public boolean onQueryTextChange(String newText) { 
    mStringSubject.onNext(newText); 
    return true; 
} 

然後

mStringSubject 
      .debounce(500, TimeUnit.MILLISECONDS) 
      .doOnNext(s -> Log.d(TAG, s)) 
      .flatMap(s -> mApiInterface.getWeather(s)) 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .onErrorReturn(throwable -> null) 
      .subscribe(new Observer<WeatherData>() { 
       @Override 
       public void onSubscribe(@NonNull Disposable d) { 
        Log.d(TAG, "onSubscribe: "); 
       } 

       @Override 
       public void onNext(@NonNull WeatherData weatherData) { 
        Log.d(TAG, "onNext: " + weatherData); 
       } 

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

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

有什麼不對的代碼的用戶類型的東西嗎?出於某種原因,它不會在日誌中顯示任何內容。難道我做錯了什麼?

注:當我做

mStringSubject 
      .debounce(500, TimeUnit.MILLISECONDS) 
      .subscribe(s -> Log.d(TAG, s)); 

其正常打印的用戶輸入值。

回答

0

試試這個

首先移出主線程並在IO線程上進行服務調用。

mStringSubject 
      .debounce(500, TimeUnit.MILLISECONDS) 
      .subscribeOn(Schedulers.computation())) 
      .doOnNext(s -> Log.d(TAG, s)) 
      .flatMap(s -> mApiInterface.getWeather(s)) 
      .subscribeOn(Schedulers.io()) 
      .observeOn(AndroidSchedulers.mainThread())