Rx-Java Retrofit没有得到任何回应

问题描述:

我正在尝试做一个示例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)); 

其正常打印的用户输入值。

试试这个

首先移出主线程并在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())