我正在尝试做一个示例Rxjava-Retrofit应用程序。我有一个API,用于从OpenWeatherMap
获取用户输入位置的天气信息我的改造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));
正确打印用户输入值。
答案 0 :(得分: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())