Autore Topic: Ascoltatore ad oggetto importato da xml manda app in crash  (Letto 679 volte)

Offline valerio65

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S III
  • Sistema operativo:
    Windows 8.1 PRO - Ubuntu 12
Ascoltatore ad oggetto importato da xml manda app in crash
« il: 13 Settembre 2012, 19:16:20 CEST »
0
Salve ragazzi, ho un problemino abbastanza scocciante...

con questo codice:

Codice: [Seleziona]
public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Button button = new Button(this);
            button.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) { /* fare qualcosa */ }});
            setContentView(button); }

e questo:

Codice: [Seleziona]
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Button button = (Button) findViewById(R.id.button1);
            button.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) { /* fare qualcosa */ }});
            setContentView(button); }
}

l'unica differenza è il costruttore del bottone! Nel primo è di base, il secondo lo prendo dalla classe R, dove il bottone è impostato nel layout XML. Beh, il primo funziona, il secondo manda tutto in crash! Qualche spiegazione?    ???

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Ascoltatore ad oggetto importato da xml manda app in crash
« Risposta #1 il: 13 Settembre 2012, 20:25:58 CEST »
0
Sono sincero: per quanto ne so, nessuno dei due codici dovrebbe funzionare. Setcontentview serve per stabilire il contenuto grafico dell'activity, per cui sta sempre dopo super.oncreate. Mettendolo dentro ad un listener, secondo me non dovrebbe apparirti niente.

A cosa dovrebbe servirti mettere la setcontentview dentro un listener di un button, che nemmeno viene visualizzato?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline valerio65

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S III
  • Sistema operativo:
    Windows 8.1 PRO - Ubuntu 12
Re:Ascoltatore ad oggetto importato da xml manda app in crash
« Risposta #2 il: 13 Settembre 2012, 20:55:40 CEST »
0
Scusami distrazione mia! Anche se non era dentro il listener, era dentro onCreate(), la parentesi in più alla fine era quella che chiudeva la classe!

comunque ho modificato il codice così, come dovrebbe essere:

Codice: [Seleziona]
   
public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Button button = (Button) findViewById(R.id.button1);
            button.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) { /* fare qualcosa */ }});
            setContentView(R.layout.activity_main);
}

ma nulla, va sempre in crash! (se metto setContent prima o dopo il costruttore superiore non cambia nulla...)

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:Ascoltatore ad oggetto importato da xml manda app in crash
« Risposta #3 il: 13 Settembre 2012, 21:11:24 CEST »
0
Il setContentView va subito dopo l'onCreate. Mettilo lì da subito per evitare errori futuri.

E poi posta il logcat dell'errore, così possiamo vedere l'eccezione :)
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.

Offline valerio65

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S III
  • Sistema operativo:
    Windows 8.1 PRO - Ubuntu 12
Re:Ascoltatore ad oggetto importato da xml manda app in crash
« Risposta #4 il: 13 Settembre 2012, 22:43:32 CEST »
0
Sisi, era il setcontent! potete spiegarmi come mai va prima??

Offline rs94

  • Utente normale
  • ***
  • Post: 227
  • Respect: +21
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia Arc S
  • Sistema operativo:
    Windows 8
Re:Ascoltatore ad oggetto importato da xml manda app in crash
« Risposta #5 il: 13 Settembre 2012, 22:49:05 CEST »
+1
in parole povere, renderizza la ui, prendendola dal layout. Quindi prima di chiamare questo metodo, nessuna view esiste (ad esempio il bottone)
L'unica certezza è il dubbio.
Dubitare di se stessi è il primo segno di intelligenza.

Offline valerio65

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S III
  • Sistema operativo:
    Windows 8.1 PRO - Ubuntu 12
Re:Ascoltatore ad oggetto importato da xml manda app in crash
« Risposta #6 il: 13 Settembre 2012, 23:44:47 CEST »
0
Capisco! Siccome in Java era un po' diverso, ma forse perché in java tutto si appoggia ad un frame, qui ovviamente se creo il bottone senza ui non sa dove metterlo, infatti il logcat parlava di NullPointerException!  :-)