我正在尝试做一个示例Rxjava-Retrofit应用程序。我有一个从OpenWeatherMap获取用户输入位置的天气信息的API。
我的改进的Api界面看起来像这样
public interface ApiInterface {
@GET("data/2.5/weather?appid=11111111111")
Observable<WeatherData> getWeather(@Query("q") String place);
}用户必须在编辑文本中输入地名,根据输入的地名,我将调用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));它可以正确地打印用户输入值。
发布于 2017-08-11 00:12:38
尝尝这个
首先移出主线程,在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())https://stackoverflow.com/questions/45615630
复制相似问题