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

Popular posts from this blog

python - Selenium remoteWebDriver (& SauceLabs) Firefox moseMoveTo action exception -

html - How to custom Bootstrap grid height? -

transpose - Maple isnt executing function but prints function term -