Wednesday 15 September 2010

java - Greenrobot EventBus Could Not Dispatch Event -



java - Greenrobot EventBus Could Not Dispatch Event -

i using eventbus communicate long running thread fragments update ui. long running thread listening network activity, parsing , putting events on bus. have 2 fragments set receive events.

i getting error when update fragments' uis (a textview) fragments' onevent method. how update ui in fragment separate thread?

here code fragments , logcat output seeing...

logcat:

10-15 02:19:44.637: i/system.out(682): debugger has settled (1440) 10-15 02:19:45.021: v/brrt(682): start thread 10-15 02:19:45.021: v/brrt(682): past start thread 10-15 02:19:45.031: v/test(682): running thread... 10-15 02:19:45.121: d/event(682): no subscribers registered event class com.broadreach.radiotester.io.expeditionevent 10-15 02:19:45.121: d/event(682): no subscribers registered event class de.greenrobot.event.nosubscriberevent 10-15 02:19:45.261: v/brrt(682): oneup event received: 204 : 32 10-15 02:19:45.271: w/resourcetype(682): no bundle identifier when getting value resource number 0x00000000 10-15 02:19:45.351: e/event(682): not dispatch event: class com.broadreach.radiotester.io.expeditionevent subscribing class class com.broadreach.radiotester.screens.oneupscreen 10-15 02:19:45.351: e/event(682): android.content.res.resources$notfoundexception: string resource id #0x0 10-15 02:19:45.351: e/event(682): @ android.content.res.resources.gettext(resources.java:247) 10-15 02:19:45.351: e/event(682): @ android.widget.textview.settext(textview.java:3428) 10-15 02:19:45.351: e/event(682): @ com.broadreach.radiotester.screens.oneupscreen.onevent(oneupscreen.java:47) 10-15 02:19:45.351: e/event(682): @ java.lang.reflect.method.invokenative(native method) 10-15 02:19:45.351: e/event(682): @ java.lang.reflect.method.invoke(method.java:511) 10-15 02:19:45.351: e/event(682): @ de.greenrobot.event.eventbus.invokesubscriber(eventbus.java:569) 10-15 02:19:45.351: e/event(682): @ de.greenrobot.event.eventbus.posttosubscription(eventbus.java:500) 10-15 02:19:45.351: e/event(682): @ de.greenrobot.event.eventbus.subscribe(eventbus.java:288) 10-15 02:19:45.351: e/event(682): @ de.greenrobot.event.eventbus.register(eventbus.java:189) 10-15 02:19:45.351: e/event(682): @ de.greenrobot.event.eventbus.registersticky(eventbus.java:166) 10-15 02:19:45.351: e/event(682): @ com.broadreach.radiotester.screens.oneupscreen.onresume(oneupscreen.java:33) 10-15 02:19:45.351: e/event(682): @ android.support.v4.app.fragment.performresume(fragment.java:1547) 10-15 02:19:45.351: e/event(682): @ android.support.v4.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:978) 10-15 02:19:45.351: e/event(682): @ android.support.v4.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:1121) 10-15 02:19:45.351: e/event(682): @ android.support.v4.app.backstackrecord.run(backstackrecord.java:682) 10-15 02:19:45.351: e/event(682): @ android.support.v4.app.fragmentmanagerimpl.execpendingactions(fragmentmanager.java:1484) 10-15 02:19:45.351: e/event(682): @ android.support.v4.app.fragmentmanagerimpl.executependingtransactions(fragmentmanager.java:482) 10-15 02:19:45.351: e/event(682): @ android.support.v4.app.fragmentstatepageradapter.finishupdate(fragmentstatepageradapter.java:163) 10-15 02:19:45.351: e/event(682): @ android.support.v4.view.viewpager.populate(viewpager.java:1073) 10-15 02:19:45.351: e/event(682): @ android.support.v4.view.viewpager.populate(viewpager.java:919) 10-15 02:19:45.351: e/event(682): @ android.support.v4.view.viewpager.onmeasure(viewpager.java:1441) 10-15 02:19:45.351: e/event(682): @ android.view.view.measure(view.java:12603) 10-15 02:19:45.351: e/event(682): @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:4677) 10-15 02:19:45.351: e/event(682): @ android.widget.framelayout.onmeasure(framelayout.java:293) 10-15 02:19:45.351: e/event(682): @ android.view.view.measure(view.java:12603) 10-15 02:19:45.351: e/event(682): @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:4677) 10-15 02:19:45.351: e/event(682): @ android.widget.linearlayout.measurechildbeforelayout(linearlayout.java:1369) 10-15 02:19:45.351: e/event(682): @ android.widget.linearlayout.measurevertical(linearlayout.java:660) 10-15 02:19:45.351: e/event(682): @ android.widget.linearlayout.onmeasure(linearlayout.java:553) 10-15 02:19:45.351: e/event(682): @ android.view.view.measure(view.java:12603) 10-15 02:19:45.351: e/event(682): @ android.view.viewgroup.measurechildwithmargins(viewgroup.java:4677) 10-15 02:19:45.351: e/event(682): @ android.widget.framelayout.onmeasure(framelayout.java:293) 10-15 02:19:45.351: e/event(682): @ com.android.internal.policy.impl.phonewindow$decorview.onmeasure(phonewindow.java:2072) 10-15 02:19:45.351: e/event(682): @ android.view.view.measure(view.java:12603) 10-15 02:19:45.351: e/event(682): @ android.view.viewrootimpl.performtraversals(viewrootimpl.java:1044) 10-15 02:19:45.351: e/event(682): @ android.view.viewrootimpl.handlemessage(viewrootimpl.java:2418) 10-15 02:19:45.351: e/event(682): @ android.os.handler.dispatchmessage(handler.java:99) 10-15 02:19:45.351: e/event(682): @ android.os.looper.loop(looper.java:137) 10-15 02:19:45.351: e/event(682): @ android.app.activitythread.main(activitythread.java:4340) 10-15 02:19:45.351: e/event(682): @ java.lang.reflect.method.invokenative(native method) 10-15 02:19:45.351: e/event(682): @ java.lang.reflect.method.invoke(method.java:511) 10-15 02:19:45.351: e/event(682): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:784) 10-15 02:19:45.351: e/event(682): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:551) 10-15 02:19:45.351: e/event(682): @ dalvik.system.nativestart.main(native method) 10-15 02:19:45.351: d/event(682): no subscribers registered event class de.greenrobot.event.subscriberexceptionevent 10-15 02:19:45.551: v/brrt(682): fourup event received: 204 : 32 10-15 02:19:45.561: w/resourcetype(682): no bundle identifier when getting value resource number 0x00000000

here 1 of fragments (they same):

public class oneupscreen extends screenfragment { private button name; private textview c00title, c00data; //debug public string title; //debug private int counter = 0; //for logging , convenience private static final string tag = "brrt"; @override public void onresume(){ super.onresume(); eventbus.getdefault().registersticky(this); } @override public void onpause(){ eventbus.getdefault().unregister(this); super.ondestroy(); } //process bus messaging public void onevent(expeditionevent event){ log.v(tag, "oneup event received: " + event.geteventid() + " : " + event.geteventscreenvalue()); c00data = (textview) getview().findviewbyid(r.id.c00data); c00data.settext(counter); counter++; } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view v = inflater.inflate(r.layout.one_up_screen_layout, container, false); name = (button) v.findviewbyid(r.id.lbltitle); c00title = (textview) v.findviewbyid(r.id.c00title); c00data = (textview) v.findviewbyid(r.id.c00data); bundle bundle = this.getarguments(); //initial set of text on screen //null check name.settext((bundle.getstring("name") == null) ? "error" : bundle.getstring("name")); c00title.settext((bundle.getstring("c00title") == null) ? "error" : bundle.getstring("c00title")); title = bundle.getstring("c00title"); homecoming v; } public oneupscreen(){ } public static oneupscreen newinstance() { oneupscreen frag = new oneupscreen(); homecoming frag; } //attach config instance. @override public void setconfig(screenconfig sc){ //set info paint screen first time bundle b = new bundle(); //now have parse stuff bundle , send bundle fragment b.putstring("name", sc.getname()); b.putstring("c00title", sc.getevents().get(0).getcleanname()); b.putint("c00data", sc.getevents().get(0).geteventid()); //pass along this.setarguments(b); } @override public void update(sparsearray<string> sensordatamap) { log.v(tag, "oneup update called: " + counter); counter++; } }

the onevent method looking here. if notice in log, method invoked. but, unable nail textview within of it. holding reference textview take in oncreate() method. saw , illustration 1 time again in event processing moved that, no luck.

if take out the:

c00data.settext(counter);

then everthing works well.

what missing here?

ok, comes here later, here how solved this...

it turns out key error seeing not event related error, resource related one.

10-15 02:19:45.271: w/resourcetype(682): no bundle identifier when getting value resource number 0x00000000

i looked elsewhere on , found this:

no bundle identifier when getting value resource number

then went code , rewrote textview.settext() calls different.

old way (counter int):

c00data.settext(counter);

new way:

c00data.settext(""+counter);

that did it. whooped.

java android multithreading android-fragments greenrobot-eventbus

No comments:

Post a Comment