ConactMap для выполнения последовательных вызовов API с прогрессом - PullRequest
0 голосов
/ 25 июня 2019

Я хочу последовательно вызывать API-интерфейсы буксировки, и это работает со мной, но я вижу эту ошибку в консоли после того, как действие было уничтожено:

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

Есть идеи, что не так?

1 Ответ

0 голосов
/ 25 июня 2019

Кажется, что ваш networkManager.postRequest поток все еще работает после baseView событий жизненного цикла.Так что он сохраняет ссылку на уничтоженный вид - это не хорошо.Я бы порекомендовал одно из этих решений:

  • Подумайте об использовании какой-либо среды в цепочке data-> medium-> view.Это позволяет не иметь ссылок на представления компонентов, не поддерживающих жизненный цикл.
  • Свяжите ваш Observable с событиями жизненного цикла View.Таким образом, ваше представление может вызвать dispose() для наблюдаемого потока, когда представление уничтожается.
...