Результат подписки с не используется.RX Java Android - PullRequest
0 голосов
/ 24 ноября 2018

Это мой фрагмент кода.

@Override
public void onDestroy() {
    super.onDestroy();
    disposableSingleObserver.dispose();
}

/**
 * fetches json by making http calls
 */
private void fetchContacts() {


    disposableSingleObserver = new DisposableSingleObserver<List<Contact>>() {
        @Override
        public void onSuccess(List<Contact> movies) {
            //Toast.makeText(getActivity(), "Success", Toast.LENGTH_SHORT).show();
            contactList.clear();
            contactList.addAll(movies);
            mAdapter.notifyDataSetChanged();

            // Received all notes
        }

        @Override
        public void onError(Throwable e) {
            // Network error
        }
    };

    // Fetching all movies
    apiService.getContacts()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeWith(disposableSingleObserver);
}

Я получаю предупреждение Результат подписки не используется.

Как правильно исправить это?

1 Ответ

0 голосов
/ 24 ноября 2018

когда вы используете subscribeWith(), он возвращает Disposable сам, через который вы можете в любое время распоряжаться подпиской.Это избавляет вас от необходимости создавать одноразовые вещи для хранения их в переменной для последующей утилизации.Вы можете сделать что-то вроде этого:

// Declare global disposable variable
private CompositeDisposable mDisposable = new CompositeDisposable();

// Then add the disposable returned by subscribeWith to the disposable
mDisposable.add(apiService.getContacts()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribeWith(disposableSingleObserver));

И в любой момент времени, если вы хотите отменить вызов API, вы можете просто вызвать как в onDestroy () mDisposable.clear();

ИЛИ

больше похоже на то, как вы это делали в настоящее время: (Обратите внимание, что результат subscribeWith() напрямую назначен вашей disposableSingleObserver переменной

disposableSingleObserver = apiService.getContacts()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeWith(new DisposableSingleObserver<List<Contact>>() {
                @Override
                public void onSuccess(List<Contact> movies) {
                    //Toast.makeText(getActivity(), "Success", Toast.LENGTH_SHORT).show();
                    contactList.clear();
                    contactList.addAll(movies);
                    mAdapter.notifyDataSetChanged();

                    // Received all notes
                }

                @Override
                public void onError(Throwable e) {
                   // Network error
                }
         });

И утилизируйте ее вonDestroy как вы делаете сейчас:

@Override
public void onDestroy() {
    super.onDestroy();
    disposableSingleObserver.dispose();
}
...