android - How to reuse an Observer in case of failure? -
i have activity loads data network , has "retry" button if request fails re-makes same network call. simplified code:
public class mainactivity extends activity { private disposableobserver<data> disposableobserver; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); findviewbyid(r.id.button).setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { loaddata(); } }); } private void loaddata() { disposableobserver = control.fetchfromnetwork().subscribewith(new disposableobserver<data>() { @override public void onnext(data data) { updateui(data); } @override public void onerror(throwable throwable) { showerror(); } @override public void oncomplete() { } }); } @override public void ondestroy() { super.ondestroy(); if (disposableobserver != null && !disposableobserver.isdisposed()) { disposableobserver.dispose(); } } } for it's worth, method creates observer:
public observable<data> fetchfromnetwork() { return getservice().fetchdata() .subscribeon(schedulers.io()) .observeon(androidschedulers.mainthread()) .doonerror(new consumer<throwable>() { @override public void accept(throwable t) throws exception { exceptionhandler.handle(t); } }); } i'm using disposableobserver can disposed of in activity's ondestroy() method.
in code, every button click create new observable , subscribe it, creating leak since last 1 disposed of in ondestroy() method. question is: there way retry/replay same observer exists without having create new 1 every time? or, there better approach scenario?
so need create newobservable every time, avoid leaking issue can create compositedisposable , use add method receives disposable created after calling .subscribe(). on ondestroy() call clear() , dispose every not disposed disposable.
Comments
Post a Comment