GreenBroot EventBus no pudo enviar el evento

Estoy utilizando EventBus para comunicarse desde un hilo largo de ejecución a fragmentos que actualizar su interfaz de usuario. Este hilo de larga ejecución básicamente está escuchando la actividad de la red, analizándola y poniendo eventos en el bus. Tengo 2 fragmentos para recibir los eventos.

Estoy recibiendo un error cuando actualizo las interfaces de usuario de los fragmentos (una vista de texto) del método onEvent de los fragmentos. ¿Cómo puedo actualizar la interfaz de usuario en un fragmento de un hilo separado?

Aquí está mi código para los fragmentos y la salida logcat que estoy viendo …

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 for event class com.broadreach.radiotester.io.ExpeditionEvent 10-15 02:19:45.121: D/Event(682): No subscribers registered for 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 package identifier when getting value for resource number 0x00000000 10-15 02:19:45.351: E/Event(682): Could not dispatch event: class com.broadreach.radiotester.io.ExpeditionEvent to 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): at android.content.res.Resources.getText(Resources.java:247) 10-15 02:19:45.351: E/Event(682): at android.widget.TextView.setText(TextView.java:3428) 10-15 02:19:45.351: E/Event(682): at com.broadreach.radiotester.screens.OneUpScreen.onEvent(OneUpScreen.java:47) 10-15 02:19:45.351: E/Event(682): at java.lang.reflect.Method.invokeNative(Native Method) 10-15 02:19:45.351: E/Event(682): at java.lang.reflect.Method.invoke(Method.java:511) 10-15 02:19:45.351: E/Event(682): at de.greenrobot.event.EventBus.invokeSubscriber(EventBus.java:569) 10-15 02:19:45.351: E/Event(682): at de.greenrobot.event.EventBus.postToSubscription(EventBus.java:500) 10-15 02:19:45.351: E/Event(682): at de.greenrobot.event.EventBus.subscribe(EventBus.java:288) 10-15 02:19:45.351: E/Event(682): at de.greenrobot.event.EventBus.register(EventBus.java:189) 10-15 02:19:45.351: E/Event(682): at de.greenrobot.event.EventBus.registerSticky(EventBus.java:166) 10-15 02:19:45.351: E/Event(682): at com.broadreach.radiotester.screens.OneUpScreen.onResume(OneUpScreen.java:33) 10-15 02:19:45.351: E/Event(682): at android.support.v4.app.Fragment.performResume(Fragment.java:1547) 10-15 02:19:45.351: E/Event(682): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:978) 10-15 02:19:45.351: E/Event(682): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1121) 10-15 02:19:45.351: E/Event(682): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 10-15 02:19:45.351: E/Event(682): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484) 10-15 02:19:45.351: E/Event(682): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:482) 10-15 02:19:45.351: E/Event(682): at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163) 10-15 02:19:45.351: E/Event(682): at android.support.v4.view.ViewPager.populate(ViewPager.java:1073) 10-15 02:19:45.351: E/Event(682): at android.support.v4.view.ViewPager.populate(ViewPager.java:919) 10-15 02:19:45.351: E/Event(682): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1441) 10-15 02:19:45.351: E/Event(682): at android.view.View.measure(View.java:12603) 10-15 02:19:45.351: E/Event(682): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4677) 10-15 02:19:45.351: E/Event(682): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 10-15 02:19:45.351: E/Event(682): at android.view.View.measure(View.java:12603) 10-15 02:19:45.351: E/Event(682): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4677) 10-15 02:19:45.351: E/Event(682): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1369) 10-15 02:19:45.351: E/Event(682): at android.widget.LinearLayout.measureVertical(LinearLayout.java:660) 10-15 02:19:45.351: E/Event(682): at android.widget.LinearLayout.onMeasure(LinearLayout.java:553) 10-15 02:19:45.351: E/Event(682): at android.view.View.measure(View.java:12603) 10-15 02:19:45.351: E/Event(682): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4677) 10-15 02:19:45.351: E/Event(682): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 10-15 02:19:45.351: E/Event(682): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2072) 10-15 02:19:45.351: E/Event(682): at android.view.View.measure(View.java:12603) 10-15 02:19:45.351: E/Event(682): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1044) 10-15 02:19:45.351: E/Event(682): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2418) 10-15 02:19:45.351: E/Event(682): at android.os.Handler.dispatchMessage(Handler.java:99) 10-15 02:19:45.351: E/Event(682): at android.os.Looper.loop(Looper.java:137) 10-15 02:19:45.351: E/Event(682): at android.app.ActivityThread.main(ActivityThread.java:4340) 10-15 02:19:45.351: E/Event(682): at java.lang.reflect.Method.invokeNative(Native Method) 10-15 02:19:45.351: E/Event(682): at java.lang.reflect.Method.invoke(Method.java:511) 10-15 02:19:45.351: E/Event(682): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 10-15 02:19:45.351: E/Event(682): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 10-15 02:19:45.351: E/Event(682): at dalvik.system.NativeStart.main(Native Method) 10-15 02:19:45.351: D/Event(682): No subscribers registered for 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 package identifier when getting value for resource number 0x00000000 

Aquí está uno de los fragmentos (se ven iguales):

 public class OneUpScreen extends ScreenFragment { private Button name; private TextView c00Title, c00Data; //DEBUG public String title; //DEBUG private int counter = 0; //for logging and 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 the 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 up of the text on the 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"); return v; } public OneUpScreen(){ } public static OneUpScreen newInstance() { OneUpScreen frag = new OneUpScreen(); return frag; } //attach the config for this instance. @Override public void setConfig(ScreenConfig sc){ //set up the data to paint the screen for the first time Bundle b = new Bundle(); //now we have to parse some stuff into a bundle and send the bundle to the fragment b.putString("name", sc.getName()); b.putString("c00Title", sc.getEvents().get(0).getCleanName()); b.putInt("c00Data", sc.getEvents().get(0).getEventID()); //pass it along this.setArguments(b); } @Override public void update(SparseArray<String> sensorDataMap) { Log.v(TAG, "OneUp Update called: " + counter); counter++; } } 

El método onEvent es donde estoy buscando aquí. Si nota en el registro, ese método se invoca. Pero, soy incapaz de golpear el textView dentro de él. Originalmente sólo estaba celebrando la referencia a la textview que tomo en el método onCreate (). pero vi y ejemplo donde lo buscas de nuevo en el proceso de eventos, así que me mudé a eso, no hay suerte.

Si saco el:

 c00Data.setText(counter); 

entonces todo funciona bien.

¿Que me estoy perdiendo aqui?

Ok, para cualquiera que venga aquí más tarde, aquí es cómo he resuelto esto …

Resulta que el error clave que estaba viendo no era el error relacionado con el evento, sino el recurso relacionado.

 10-15 02:19:45.271: W/ResourceType(682): No package identifier when getting value for resource number 0x00000000 

Miré en otra parte en SO y encontré esto:

No hay identificador de paquete al obtener el valor del número de recurso

Luego volví a mi código y reescribí las llamadas TextView.setText () para que parezcan diferentes.

Old way (contador es un int):

 c00Data.setText(counter); 

Nueva manera:

 c00Data.setText(""+counter); 

Eso lo hizo. Grité

  • Monitor de estado de subprocesos. ¿Cómo depurar esto? ¿Qué lo causa?
  • Después de ASyncTask.execute () do x () de Activity
  • La interrupción de subproceso no funciona (Java Android)
  • SQLite lectura y escritura simultánea
  • Método de dibujo de Android que se ejecuta lento
  • Android 4.0 asynctask al mismo tiempo no es posible
  • Android Surfaceview Hilos y fugas de memoria
  • Cliente personalizado para la autenticación de WebTokens
  • ¿Por qué un AsyncTask no se inicia si se inicia / se detiene repetidamente?
  • Android: java.lang.Throwable: setStateLocked
  • ¿Cómo gestiona la memoria Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.