когда вы используете 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();
}