studio start sendbroadcast registerreceiver oreo intent example ejemplos date_changed android android-intent broadcastreceiver

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.