Autore Topic: problema di associazione id con ImageButton  (Letto 738 volte)

Offline sancho

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
problema di associazione id con ImageButton
« il: 02 Ottobre 2012, 18:50:50 CEST »
0
Salve a tutti,

sto da poco studiando android, ed avrei un problema che non riesco a risolvere.

Devo semplicemente associare un'id ad un ImageButton e mostrarlo.

Ecco il codice che ho scritto ma che purtroppo va in crash.

Codice (Java): [Seleziona]
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.ImageButton;
import android.widget.LinearLayout;


public class FirstActivity extends Activity {
       
    @Override
    public void onCreate(Bundle savedInstanceState) {
       
        super.onCreate(savedInstanceState);
 
        ImageButton login = (ImageButton) findViewById(R.id.login);
       
        LinearLayout layout = new LinearLayout(this);

        layout.addView(login);
   
        setContentView(layout);
    }

}

Da quello che ho potuto capire va in crash sulla riga: layout.addView(login);

L'errore che mi da LogCat è questo
Tag: AndroidRuntime.
Text: java.lang.RuntimeException: Unable to start activity ComponentInfo{it.prova.provawidget/it.prova.provawidget.FirstActivity}: java.lang.NullPointerException

Utilizzo API level 15.

Qualcuno può aiutarmi a capirci qualcosa? Grazie Mille


Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
R: problema di associazione id con ImageButton
« Risposta #1 il: 02 Ottobre 2012, 20:04:41 CEST »
0
Non vedo nell'onCreate che dici qual'è il layout che vuoi usare nell'attività. Credo quindi che quando fai findViewById ricevi un null, la prima volta che cerchi di usarlo hai giustamente la null pointer exception.
Imposta il layout nell'attività e vedrai che non avrai più quel problema.

Inviato dal mio XT910 con Tapatalk 2


Offline sancho

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:problema di associazione id con ImageButton
« Risposta #2 il: 02 Ottobre 2012, 20:52:25 CEST »
0
Ciao, grazie per la risposta.

Che intendi per "Imposta il layout nell'attività"?

Io credo di averlo impostato scrivendo: LinearLayout layout = new LinearLayout(this);

Non si fa così?


Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:problema di associazione id con ImageButton
« Risposta #3 il: 03 Ottobre 2012, 09:11:53 CEST »
+1
Scusami, ieri sera ho risposto da telefono e non potevo essere eccessivamente prolisso  :-P

Il tuo problema è questo:
Codice (Java): [Seleziona]
@Override
    public void onCreate(Bundle savedInstanceState) {
        // assegna il layout di default per le activity
        super.onCreate(savedInstanceState);
        // tento di recuperare l'ImageButton dal layout di default... ma non ci sta!
        ImageButton login = (ImageButton) findViewById(R.id.login);
        // login è null!

Quando crei un'activity il sistema gli assegna un layout di default nel super.onCreate, layout che però è praticamente vuoto.
Se da questo layout cerchi di ottenere subito il riferimento ad un ImageButton che si chiama R.id.login (come stai facendo) non ti tornerà nulla, perché nel layout di default non esiste nulla di tutto ciò.

Invece che crearti il layout via codice come stai facendo, quello che dovresti fare è crearti un layout per l'activity in xml e impostarlo nell'onCreate.

A titolo puramente esemplificativo; in res/layout crei il file di layout my_layout.xml
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >

            <ImageButton
               android:id="@+id/login"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:src="@drawable/ic_launcher" />
</LinearLayout>

nell'activity fai:
Codice (Java): [Seleziona]
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.ImageButton;
import android.widget.LinearLayout;


public class FirstActivity extends Activity {
       
    @Override
    public void onCreate(Bundle savedInstanceState) {
       
        super.onCreate(savedInstanceState);

        // imposto il layout da usare
        setContentView(R.layout.my_layout);
 
        // tento di recuperare l'ImageButton dal layout che ho impostato...
        ImageButton login = (ImageButton) findViewById(R.id.login);
       
        // login non è null, posso usarlo se mi serve...
       
        // LinearLayout layout = new LinearLayout(this);   non mi serve, è già definito dell'xml di layout

        // layout.addView(login);   non mi serve, è già definito dell'xml di layout
   
        // setContentView(layout);  non mi serve, l'ho già fatto
    }

}

In android hanno messo questa bella cosa di poter descrivere il layout in un file esterno, perché costruirselo "a mano" nell'onCreate?
« Ultima modifica: 03 Ottobre 2012, 09:14:43 CEST da Sakazaki »

Offline sancho

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:problema di associazione id con ImageButton
« Risposta #4 il: 03 Ottobre 2012, 11:52:59 CEST »
0
Ciao e grazie ancora per la risposta.

Ho provato a fare come hai detto tu ed effettivamente l'applicazione parte e mi fa visualizzare il mio bottone di login. Però appena provo a fare qualcosa con quel bottone (per esempio vorrei usare il metodo setOnClickListener) mi lancia ancora l'eccezione NullPointerException.

Io credo che stia sbagliando qualcosa con questa ImageButton, perchè se invece di usare l'ImageButton uso un Button normale, funziona tutto.

Hai qualche altro suggerimento? Sto impazzendo! :)

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:problema di associazione id con ImageButton
« Risposta #5 il: 03 Ottobre 2012, 11:56:23 CEST »
0
Ci sono talmente tante cose che possono andare storte...
Posta il codice e il logCat, così abbiamo una base di partenza  ;-)

Offline sancho

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:problema di associazione id con ImageButton
« Risposta #6 il: 03 Ottobre 2012, 12:11:12 CEST »
0
Ok, ho risolto. Anche se non so precisamente cosa ho fatto, ma andando ad aggiustare un po' il codice che era disordinato per postarlo qui, ho provato a rieseguirlo e funziona tutto. Finalmente. Eheheheh. Ti ringrazio ancora una volta sei stato gentilissimo. Ciao!!  :D

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:problema di associazione id con ImageButton
« Risposta #7 il: 03 Ottobre 2012, 12:14:27 CEST »
0
Ok, ho risolto. Anche se non so precisamente cosa ho fatto, ma andando ad aggiustare un po' il codice che era disordinato per postarlo qui, ho provato a rieseguirlo e funziona tutto. Finalmente. Eheheheh. Ti ringrazio ancora una volta sei stato gentilissimo. Ciao!!  :D

De nada, buon divertimento  :-)

Offline sancho

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:problema di associazione id con ImageButton
« Risposta #8 il: 03 Ottobre 2012, 12:16:15 CEST »
0
Vorrei ringraziarti cliccando sull'icona "Thanks" ma non la trovo!

Edit: trovata!!