ConactMap 使序列 API 调用有进度
ConactMap to make sequence API calls with progress
我想按顺序调用两个 API 并且它与我一起工作但是我在 activity 被销毁后在控制台中看到这个错误:
E/WindowManager: android.view.WindowLeaked: Activity com.deve.blueage.ui.register.RegisterActivity has leaked window DecorView@29a83fa[RegisterActivity] that was originally added here
这是我的代码:
disposable.add(networkManager.postRequest(Endpoints.REGISTER_URL, param, UserModel.class)
.map(this::storeUser)
.concatMap(user -> {
HashMap<String, Object> param2 = new HashMap<>();
param2.put("username", user.getEmail());
param2.put("password", password);
return networkManager.postRequest(Endpoints.LOGIN_URL, param2, String.class)
.delay(1000, TimeUnit.MILLISECONDS)
.map(this::storeUserToken);
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(v -> baseView.showLoading())
.doOnTerminate(() -> baseView.hideLoading())
.subscribe(v -> signUpLiveData.setValue(true), this::processError));
知道哪里出了问题吗?
您的 networkManager.postRequest
流程似乎在 baseView
生命周期事件之后仍在运行。所以它将 link 保留在被破坏的视图中——这不好。
我推荐以下解决方案之一:
- 考虑在链中使用某种媒介
data-> medium-> view
。它允许没有 link 的视图来自 lifecycle-unaware
组件。
- Link 你的 Observable to View 的生命周期事件。所以,你的
当视图被销毁时,视图可以触发 Observable 流的
dispose()
。
我想按顺序调用两个 API 并且它与我一起工作但是我在 activity 被销毁后在控制台中看到这个错误:
E/WindowManager: android.view.WindowLeaked: Activity com.deve.blueage.ui.register.RegisterActivity has leaked window DecorView@29a83fa[RegisterActivity] that was originally added here
这是我的代码:
disposable.add(networkManager.postRequest(Endpoints.REGISTER_URL, param, UserModel.class)
.map(this::storeUser)
.concatMap(user -> {
HashMap<String, Object> param2 = new HashMap<>();
param2.put("username", user.getEmail());
param2.put("password", password);
return networkManager.postRequest(Endpoints.LOGIN_URL, param2, String.class)
.delay(1000, TimeUnit.MILLISECONDS)
.map(this::storeUserToken);
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(v -> baseView.showLoading())
.doOnTerminate(() -> baseView.hideLoading())
.subscribe(v -> signUpLiveData.setValue(true), this::processError));
知道哪里出了问题吗?
您的 networkManager.postRequest
流程似乎在 baseView
生命周期事件之后仍在运行。所以它将 link 保留在被破坏的视图中——这不好。
我推荐以下解决方案之一:
- 考虑在链中使用某种媒介
data-> medium-> view
。它允许没有 link 的视图来自 lifecycle-unaware 组件。 - Link 你的 Observable to View 的生命周期事件。所以,你的
当视图被销毁时,视图可以触发 Observable 流的
dispose()
。