android - IllegalArgumentException when using Otto with a retained Fragment -


i using otto 1.3.3 , when resume application illegalargumentexception following stacktrace:

caused by: java.lang.illegalargumentexception: producer method type class  com.couchsurfing.mobile.ui.setup         .sessionproviderfragment$sessionconnectionstatechangeevent found on          type class com.couchsurfing.mobile.ui.setup.sessionproviderfragment,          registered type class          com.couchsurfing.mobile.ui.setup.sessionproviderfragment.     @ com.squareup.otto.bus.register(bus.java:194)     @ com.couchsurfing.mobile.ui.baseretainedfragment        .oncreate(baseretainedfragment.java:20) 

the sessionproviderfragment has instance retained, please find below extended class:

public abstract class baseretainedfragment extends sherlockfragment {      @inject     bus bus;      @override     public void oncreate(final bundle state) {         super.oncreate(state);         ((couchsurfingapplication) getactivity().getapplication()).inject(this);         setretaininstance(true);         bus.register(this);     }      @override     public void ondestroy() {         super.ondestroy();         bus.unregister(this);         bus = null;     } } 

i tried both using bus.register(this) in onattach() or oncreate(), didn't change issue.

the proper place register on bus in onresume() , proper place unregister in onpause() so:

public abstract class baseretainedfragment extends robosherlockfragment {     @inject private bus bus;      @override     public void oncreate(final bundle state) {         super.oncreate(state);         setretaininstance(true);     }      @override     public void onresume() {         super.onresume();         bus.register(this);     }      @override     public void onpause() {         super.ondestroy();         bus.unregister(this);     } } 

note ondestroy() not guaranteed called.

you might comment on , say, hey chris, if register in onresume() , and events fired before hit method won't receive events! right, means aren't using producers should be.

also note, if use roboguice-sherlock don't have inject yourself. don't need null bus when fragment goes out of scope garbage collector clean you.


Comments

Popular posts from this blog

Change php variable from jquery value using ajax (same page) -

How can I fetch data from a web server in an android application? -

jquery - How can I dynamically add a browser tab? -