Autore Topic: Problema banale con l' implementazione di un bottone xml nel listato java  (Letto 543 volte)

Offline giuliom_95

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus Life
  • Sistema operativo:
    Linux Fedora 14 Gnome 32-bit version
Sono nuovo nel campo della programmazione android ma ho già qualche esperienza per quanto riguarda il linguaggio java. Programmando applicazioni per pc con java non ho mai utilizzato layout xml ma, siccome per programmare in android sono quasi essenziali, ho deciso di approfondirli. Sto provando a fare un' app semplice che visualizza un messagio quando si tocca un bottone. Ecco il codice java:

Codice (Java): [Seleziona]
package com.giuliom.devel;

import android.app.Activity;
import android.os.Bundle;
import android.view.*;
import android.view.View.OnClickListener;
import android.widget.*;

public class Devel extends Activity {

        private OnClickListener clickListener = new OnClickListener() {
                public void onClick(View v) {
                        Toast.makeText(getApplicationContext(), "Advice", 20).show();
                }
        };
       
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
       
                Button myButton = (Button) findViewById(R.id.my_button);
                myButton.setOnClickListener(clickListener);
                setContentView(R.layout.main);
               
        }
   
}

Ecco il layout/main.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" >

    <Button android:id="@+id/my_button"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="my_button_text"/>
</LinearLayout>

Ogni volta che eseguo il programma in un AVD (API level 8) mi dà quest' errore:

Codice: [Seleziona]
03-16 13:17:05.678: E/AndroidRuntime(446): FATAL EXCEPTION: main
03-16 13:17:05.678: E/AndroidRuntime(446): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gnusmash.devel/com.gnusmash.devel.Devel}: java.lang.NullPointerException
03-16 13:17:05.678: E/AndroidRuntime(446):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
03-16 13:17:05.678: E/AndroidRuntime(446):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
03-16 13:17:05.678: E/AndroidRuntime(446):         at android.app.ActivityThread.access$2300(ActivityThread.java:125)
03-16 13:17:05.678: E/AndroidRuntime(446):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
03-16 13:17:05.678: E/AndroidRuntime(446):         at android.os.Handler.dispatchMessage(Handler.java:99)
03-16 13:17:05.678: E/AndroidRuntime(446):         at android.os.Looper.loop(Looper.java:123)
03-16 13:17:05.678: E/AndroidRuntime(446):         at android.app.ActivityThread.main(ActivityThread.java:4627)
03-16 13:17:05.678: E/AndroidRuntime(446):         at java.lang.reflect.Method.invokeNative(Native Method)
03-16 13:17:05.678: E/AndroidRuntime(446):         at java.lang.reflect.Method.invoke(Method.java:521)
03-16 13:17:05.678: E/AndroidRuntime(446):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-16 13:17:05.678: E/AndroidRuntime(446):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-16 13:17:05.678: E/AndroidRuntime(446):         at dalvik.system.NativeStart.main(Native Method)
03-16 13:17:05.678: E/AndroidRuntime(446): Caused by: java.lang.NullPointerException
03-16 13:17:05.678: E/AndroidRuntime(446):         at com.gnusmash.devel.Devel.onCreate(Devel.java:23)
03-16 13:17:05.678: E/AndroidRuntime(446):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-16 13:17:05.678: E/AndroidRuntime(446):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
03-16 13:17:05.678: E/AndroidRuntime(446):         ... 11 more

So che sarà una cosa stupidissima ma non so come riparare l' errore...
P.S.: L' app è compilata con API 8 e utilizzo l' estenzione AVD per Eclipse Indigo Classic per sviluppare

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Problema banale con l' implementazione di un bottone xml nel listato java
« Risposta #1 il: 16 Marzo 2012, 13:44:48 CET »
0
Il setContentView devi metterlo prima del findViewById.

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 516
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:Problema banale con l' implementazione di un bottone xml nel listato java
« Risposta #2 il: 16 Marzo 2012, 13:46:55 CET »
0
   
Codice (Java): [Seleziona]
@Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
       
                Button myButton = (Button) findViewById(R.id.my_button);
                myButton.setOnClickListener(clickListener);
                setContentView(R.layout.main);
               
        }

Questo:

Codice (Java): [Seleziona]
setContentView(R.layout.main);
mettilo subito dopo:

Codice (Java): [Seleziona]
super.onCreate(savedInstanceState);
Saluti.
I numeri contano molto di più del seme.

Offline giuliom_95

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus Life
  • Sistema operativo:
    Linux Fedora 14 Gnome 32-bit version
Re:Problema banale con l' implementazione di un bottone xml nel listato java
« Risposta #3 il: 16 Marzo 2012, 14:10:10 CET »
0
grazie ad entrambi, il medoto funziona. Ma se non pretendo troppo vorrei chiedervi perchè la posizione del setContentView influisce in questo modo. Grazie ancora

Offline eagledeveloper

  • Translate Team
  • Utente senior
  • ****
  • Post: 516
  • Respect: +37
    • Google+
    • 347516210
    • dark_pinz
    • @WandDStudios
    • Mostra profilo
    • W&D Studios
  • Dispositivo Android:
    HTC One X e HTC One
  • Play Store ID:
    W%26D+Studios
  • Sistema operativo:
    Ubuntu / Windows 7
Re:Problema banale con l' implementazione di un bottone xml nel listato java
« Risposta #4 il: 16 Marzo 2012, 14:17:21 CET »
0
grazie ad entrambi, il medoto funziona. Ma se non pretendo troppo vorrei chiedervi perchè la posizione del setContentView influisce in questo modo. Grazie ancora

Il setContentView dice all'Activity: "guarda questo dev'essere il tuo contenuto", se non lo fai l'Activity e' vuota (schermo nero).
Quindi quando fai findViewById di un Activity vuota ti ritorna null, cercando di fare qualcosa con quel null l'applicazione va in crash per NullPointerException.

Chiaro?

Saluti.
I numeri contano molto di più del seme.

Offline giuliom_95

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Optimus Life
  • Sistema operativo:
    Linux Fedora 14 Gnome 32-bit version
Re:Problema banale con l' implementazione di un bottone xml nel listato java
« Risposta #5 il: 16 Marzo 2012, 14:32:40 CET »
0
Ah ok ho capito, grazie  :D
« Ultima modifica: 16 Marzo 2012, 14:34:16 CET da giuliom_95 »