以下为我的代码
@POST("/hospital/department/list")
Observable<ResponseBody> list(@Body Department department);
public Observable<String> list(Department department) {
return departmentAPI.list(department)
.flatMap((Function<ResponseBody, ObservableSource<String>>) responseBody -> Observable.just(responseBody.string()));
}
private void initDepOptions() {
final ProgressDialog progressDialog = new ProgressDialog(getContext());
depDataManager.list(tDepartment)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(disposable -> {
progressDialog.setMessage(LOADING_MESSAGE);
progressDialog.show();
})
.doOnComplete(() -> progressDialog.dismiss())
.subscribe(new RxSubscriber<String>() {
@Override
public void onNext(String s) {
ApiResponse response = GsonParser.fromJSONObject(s, ApiResponse.class);
if (response.success()) {
transform2DepartmentList(response.data);
} else {
Toasty.error(getContext(), response.message, Toast.LENGTH_LONG, true).show();
}
}
});
}
我准备用其来获取服务端 json 数据并反序列化,可是这时候出现了一个问题,subscribe 中的 onNext 方法并未执行...
ps:
RxSubscriber
public class RxSubscriber<T> extends DisposableObserver<T> {
@Override
public void onNext(@NonNull T t) {
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
}
1
YellowLittleDog 2019-05-01 22:04:36 +08:00 via Android
你有没有看看 onerror 是否执行了
|
2
mxalbert1996 2019-05-01 22:55:58 +08:00 via Android
首先网络请求应该用 Single 而不是 Observable。
然后第二段代码里为什么要用 flatMap ?直接 map(responseBody -> responseBody.string() 不就行了? |
3
mxalbert1996 2019-05-01 23:06:32 +08:00 via Android
另外第三段代码里的 subscribe(DisposableObserver)我在 API 文档里没找到,应该是 subscribeWith ?
|
4
kuyuzhiqi 2019-05-01 23:32:31 +08:00
先只保留最主要的逻辑,用最简单的写法,注释掉 ProgressDialog 这些无关的代码,看看哪里出了问题,再加其它的功能
|
5
Yyyye 2019-05-01 23:45:11 +08:00
那就是走 OnError 了 没的套路了,小 bug!
|