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

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

node.js - Getting the socket id,user id pair of a logged in user(s) -

keyboard - C++ GetAsyncKeyState alternative -