start - sendbroadcast android
NullPointerException al usar LocalBroadcastManager (2)
Me acabo de enterar de esto. El NPE es el resultado de que el oyente registrado (read: receiver) para el evento que está disparando (MyIntents.LOCATION_UPDATE) no haya sido instanciado por el componente que lo hospeda.
Compruebe que lo que desea responder a esta transmisión se ha instanciado en el momento correcto (probablemente la actividad / fragmento de alojamiento).
Intento utilizar LocalBroadcastManager con mis intenciones personalizadas. Parece que es muy quisquilloso con los intentos y si envío el intento de esta manera:
En Myintents.java declaro
public static final String LOCATION_UPDATE = "com.example.myapp.location_update";
Más adelante en el emisor de difusión, hago:
Intent intent = new Intent(MyIntents.LOCATION_UPDATE);
localBroadcastManager.sendBroadcast(intent);
Entonces estoy obteniendo esta excepción:
05-05 02:23:29.914: E/AndroidRuntime(6952): FATAL EXCEPTION: main
05-05 02:23:29.914: E/AndroidRuntime(6952): java.lang.NullPointerException
05-05 02:23:29.914: E/AndroidRuntime(6952): at android.support.v4.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:297)
05-05 02:23:29.914: E/AndroidRuntime(6952): at android.support.v4.content.LocalBroadcastManager.access$000(LocalBroadcastManager.java:46)
05-05 02:23:29.914: E/AndroidRuntime(6952): at android.support.v4.content.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:116)
05-05 02:23:29.914: E/AndroidRuntime(6952): at android.os.Handler.dispatchMessage(Handler.java:99)
Sin embargo, si uso una cadena explícita
Intent intent = new Intent("my-intent");
Todo funciona bien
¿Qué pasa? ¿Por qué no puedo definir el nombre de intento en otra clase?
En mi caso, (tuve el mismo error) olvidé crear una instancia de mi clase que extienda BroadcastReceiver. (y anula el método onReceive ())
private MeasurementUpdateReceiver m_MeasurementUpdateReceiver;
// Listens to local broadcasts done by the MeasurementService
private class MeasurementUpdateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Intent already filtered by the LocalBroadcastManager in onResume()
String data = intent.getStringExtra("data"));
Toast.makeText(getApplicationContext(), "Received data " + data, Toast.LENGTH_LONG).show();
}
}
Pasar una referencia vacía de esta clase al LocalBroadcastManager con:
LocalBroadcastManager.getInstance(this).registerReceiver(m_MeasurementUpdateReceiver, new IntentFilter("measurementupdate"));
no fue un problema hasta que intenta invocar el método onReceive () de la clase. Lo que olvidé fue:
m_MeasurementUpdateReceiver = new MeasurementUpdateReceiver();
Espero que esto ayude a otras personas que enfrentan este error.