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