Ascoltatore personalizzato di Android per un evento

Sto provando a sparare un evento quando un valore integer viene aggiornato, ma non riesce. Ecco il codice che utilizzo:

Dichiarare l'ascoltatore personalizzato

  • getActionView è deprecato?
  • Inserisci i dati JSON nel database SQLite in android
  • Come trovare la fonte Intent in Android?
  • Separa Back Stack per each scheda in Android utilizzando Fragmenti
  • Autenticazione NTLM in Android
  • Sovrapposizioni di mappe efficienti in Google Maps di Google
  • public class fieldactivity extends AppCompatActivity implements View.OnClickListener { OnModeUpdate modeupdate; //Create custom listener for mode update int mode = 1; 

    Codice di aggiornamento modalità

      protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fieldsignals); Button button = (Button) findViewById(R.id.mode_rotate_button); button.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case(R.id.rotate_button): mode += 1; modeupdate.onEvent(); //Fire Custom Lisentener - Fails On This Line } } 

    Codice di interface

     public interface OnModeUpdate { //BreakPoint here, but is never reached void onEvent(); } public void setModeupdate(OnModeUpdate eventListener) { modeupdate = eventListener; } 

    L'errore che sto ottenendo è:

    java.lang.NullPointerException: Tentativo di ricall il metodo di interface 'void hive.com.plcsignalconverter.fieldactivity $ OnModeUpdate.onEvent ()' su un riferimento di null object

    C'è qualcosa che mi manca?

  • Come faccio a convertire ppi in dpi per le immagini di Android?
  • Attivare e distriggersre un ricevitore di trasmissione
  • Come rilevare se il dispositivo Android è abbinato a orologio di usura Android
  • Android Studio - Esegui apk firmato sull'emulatore
  • IAB startSetup NullPointerException
  • Come faccio a "findViewById" con frammenti?
  • 2 Solutions collect form web for “Ascoltatore personalizzato di Android per un evento”

    Il NullPointerException è causato da methods di chiamata su un object di riferimento null, che è un object che non è stato inizializzato.

    Nel tuo caso, l'object null è modeUpdate . Provare ad inizializzarla nel onCreate() della tua attività.

     modeupdate = new OnModeUpdate() { @Override public void onEvent() { /** * Write the code to handle the case */ } }; 

    Il nome più generale per l' ascoltatore è il model di osservazione *. Parlando della terminologia del model, quello che stai cercando è di fare un osservatore, vale a dire modalità di modeupdate , notificato quando un evento (valore di integer valore) si verifica all'interno di un object osservabile, vale a dire la fieldactivity interagisce con un utente.

    L'osservatore, modalità di modeupdate , può essere di qualsiasi tipo e deve implementare l'interface OnModeUpdate per ricevere notifiche dall'object osservabile. Per esempio**

     public class CustomListener implements OnModeUpdate { @Override public void onEvent() { ... } } 

    Adesso puoi assegnare l'osservatore ( modeupdate ) nell'object osservabile (attività del fieldactivity ) con una delle seguenti opzioni (secondo la tua logica di business):

    • inizializza la modeupdate di modeupdate con un'istanza di class "esterna"

       OnModeUpdate modeupdate = new CustomListener(); 
    • inizializzare la modeupdate di modeupdate con un'istanza class interna anonima all'interno fieldactivity class di attività

       modeupdate = new OnModeUpdate() { @Override public void onEvent() { // Do stuff regarding the mode change } }; 
    • assegnare la modeupdate di modeupdate all'esterno della class di attività di field chiamando setModeupdate(...) sul riferimento all'istanza di field di attività ***.

    Di sopra spiega la causa di NullPointerException . Non hai mai inizializzato il modo di modeupdate . Dopo l'initialization di modeupdate il metodo onEvent() verrà triggersto con un clic del button.

    Nota: hai scritto nel commento al codice: "// BreakPoint qui, ma non viene mai raggiunto". Non può essere raggiunta all'interno della dichiarazione di interface, solo in un'istanza dell'object che implementa l'interface.


    * Un altro nome del model è il model Subscriber-Publisher.
    ** Se l' interface OnModeUpdate è dichiarata all'interno di attività di field utilizzare la class pubblica CustomListener implementa fieldactivity.OnModeUpdate
    *** Come accade con la variabile del button chiamando setOnClickListener () fuori dalla class Button e assegnando un ascoltatore, vale a dire un object ( fieldactivity ) che implementa l' interface View.OnClickListener

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.