Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di SigAlexey
    Registrato dal
    May 2014
    residenza
    Treviso
    Messaggi
    186

    [Android] Problema con setOnClickListener

    Ciao ragazzi! Sono di nuovo qua!
    Per lavoro ho dovuto iniziare con android.
    Non mi sembra facilissimo, anche se sto iniziando a capire, però per ora non riesco ancora a decifrare gli errori D:

    Praticamente vorrei iniziare con una cosa semplicissima:
    quando clicco su un tasto si apre una nuova pagina o comunque succede qualcosa

    in questo caso dovrei aprire una nuova pagina (activity), ma per ora mi andrebbe bene anche visualizzare un messaggio... giusto per capire!
    Vi posto il codice

    codice:
    public class MainActivity extends ActionBarActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
           
            Button btn = (Button)findViewById(R.id.button1);
          
            btn.setOnClickListener(new View.OnClickListener() {
            	  public void onClick(View view) { 
                      // definisco l'intenzione  
                      Intent openPage1 = new Intent(MainActivity.this,Pagina1.class);  
                      // passo all'attivazione dell'activity Pagina.java   
                      startActivity(openPage1); 
            	  }
            	});

    Se può servire sul LogCat mi esce questo

    codice:
    06-26 05:31:02.485: D/AndroidRuntime(1606): Shutting down VM06-26 05:31:02.485: W/dalvikvm(1606): threadid=1: thread exiting with uncaught exception (group=0xb3a3cba8)
    06-26 05:31:02.505: E/AndroidRuntime(1606): FATAL EXCEPTION: main
    06-26 05:31:02.505: E/AndroidRuntime(1606): Process: com.example.prova1, PID: 1606
    06-26 05:31:02.505: E/AndroidRuntime(1606): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.prova1/com.example.prova1.MainActivity}: java.lang.NullPointerException
    06-26 05:31:02.505: E/AndroidRuntime(1606): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
    06-26 05:31:02.505: E/AndroidRuntime(1606): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
    06-26 05:31:02.505: E/AndroidRuntime(1606): 	at android.app.ActivityThread.access$800(ActivityThread.java:135)
    06-26 05:31:02.505: E/AndroidRuntime(1606): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
    06-26 05:31:02.505: E/AndroidRuntime(1606): 	at android.os.Handler.dispatchMessage(Handler.java:102)
    06-26 05:31:02.505: E/AndroidRuntime(1606): 	at android.os.Looper.loop(Looper.java:136)
    06-26 05:31:02.505: E/AndroidRuntime(1606): 	at android.app.ActivityThread.main(ActivityThread.java:5017)
    06-26 05:31:02.505: E/AndroidRuntime(1606): 	at java.lang.reflect.Method.invokeNative(Native Method)
    06-26 05:31:02.505: E/AndroidRuntime(1606): 	at java.lang.reflect.Method.invoke(Method.java:515)
    06-26 05:31:02.505: E/AndroidRuntime(1606): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    06-26 05:31:02.505: E/AndroidRuntime(1606): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
    06-26 05:31:02.505: E/AndroidRuntime(1606): 	at dalvik.system.NativeStart.main(Native Method)
    06-26 05:31:02.505: E/AndroidRuntime(1606): Caused by: java.lang.NullPointerException
    06-26 05:31:02.505: E/AndroidRuntime(1606): 	at com.example.prova1.MainActivity.onCreate(MainActivity.java:36)
    06-26 05:31:02.505: E/AndroidRuntime(1606): 	at android.app.Activity.performCreate(Activity.java:5231)
    06-26 05:31:02.505: E/AndroidRuntime(1606): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
    06-26 05:31:02.505: E/AndroidRuntime(1606): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
    06-26 05:31:02.505: E/AndroidRuntime(1606): 	... 11 more
    Se mi dite come fare vi amo ahaha

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Così, ad occhio, potrebbe essere che btn sia nullo... controlla il Layout XML dell'activity e verifica che il pulsante abbia effettivamente come ID "button1". Eventualmente, posta il file di Layout.

    Considerazione. Di solito, quando si ha a che fare con componenti a cui si aggiungono ascoltatori (come nel tuo caso, il pulsante a cui viene aggiunto il OnClickListener), si opta per una delle due strade:

    1) Se il pulsante è dichiarato all'interno di un metodo (ed è il tuo caso), allora lo si dichiara come final, perchè l'ascoltatore è una inner anonymous class, che perderebbe il riferimento al pulsante appena il metodo finisce.

    2) Si di chiara il pulsante a livello di classe e dentro al metodo lo si assegna soltanto ( con la findViewById() ). In questo modo l'ascoltatore non perde il riferimento al pulsante.

    In ogni caso, io preferisco fare in modo che l'ascoltatore richiami un metodo della Activity, che poi farà tutto il lavoro... in questo modo puoi lavorare più maneggevolmente:


    codice:
    public class MainActivity extends Activity {
       ...
       private Button cmd;
       ...
    
       @Override
       protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          ...
          cmd = (Button) findViewById(R.id.button1);
          cmd.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
                avviaActivity();
             }
          });
       }
       ...
       private void avviaActivity() {
          Intent intent = new Intent(this, Pagina1.class);
          startActivity( intent );
       }
       ...
    }

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di SigAlexey
    Registrato dal
    May 2014
    residenza
    Treviso
    Messaggi
    186
    No no è assegnato... eccolo qua

    Grazie per la disponibilità

    codice:
    <?xml version="1.0" encoding="utf-8"?>  
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent" >  
      
        <TextView  
            android:id="@+id/textView1"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:layout_above="@+id/button1"  
            android:layout_centerHorizontal="true"  
            android:text="Esempio di Relative Layout"  
            android:textAppearance="?android:attr/textAppearanceMedium" />  
          
        <Button  
            android:id="@+id/button1"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:layout_alignBaseline="@+id/editText1"  
            android:layout_alignBottom="@+id/editText1"  
            android:layout_toRightOf="@+id/editText1"  
            android:text="Button" />  
       
        <EditText  
            android:id="@+id/editText1"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:layout_alignParentLeft="true"  
            android:layout_alignParentTop="true"  
            android:layout_marginLeft="16dp"  
            android:layout_marginTop="54dp"  
            android:ems="10" />  
      
    </RelativeLayout>

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    E qual è la riga 36 del file MainActivity.java?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it L'avatar di SigAlexey
    Registrato dal
    May 2014
    residenza
    Treviso
    Messaggi
    186
    codice:
     if (savedInstanceState == null) {
                getSupportFragmentManager().beginTransaction()
                        .add(R.id.container, new PlaceholderFragment())
                        .commit();
            }
    righe 35-38

    Però non le ho inserite io... le ha messe eclipse in automatico alla creazione del progetto

  6. #6
    Utente di HTML.it L'avatar di SigAlexey
    Registrato dal
    May 2014
    residenza
    Treviso
    Messaggi
    186
    Comunque il punto è che il problema è sul btn.setOnClickListener perchè se lo tolgo non crasha

  7. #7
    Utente di HTML.it L'avatar di SigAlexey
    Registrato dal
    May 2014
    residenza
    Treviso
    Messaggi
    186
    Ok! Ho trovato il modo di far apparire una scritta... adesso però se provo a far apparire l'altra pagina (con il metodo che ho messo sopra) mi da lo stesso errore...

    Metto il codice



    codice:
    public class MainActivity extends ActionBarActivity {
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.fragment_main);
           
            Button btn = (Button)findViewById(R.id.button1);
          final TextView textView1 = (TextView)findViewById(R.id.textView1);
          btn.setOnClickListener(new View.OnClickListener() {
              public void onClick(View view) { 
                  
                  Intent openPage1 = new Intent(MainActivity.this,Page1.class);  
                  startActivity(openPage1);
                  // per far uscire la scritta  textView1.setText("CIAO");
              }
      
        });
    
    
        }

    LAYOUT

    codice:
    <?xml version="1.0" encoding="utf-8"?>  
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
        android:layout_width="match_parent"  
        android:layout_height="match_parent" >  
      
        <TextView  
            android:id="@+id/textView1"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:layout_above="@+id/button1"  
            android:layout_centerHorizontal="true"  
            android:text="Esempio di Relative Layout"  
            android:textAppearance="?android:attr/textAppearanceMedium" />  
          
        <Button  
            android:id="@+id/button1"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:layout_alignBaseline="@+id/editText1"  
            android:layout_alignBottom="@+id/editText1"  
            android:layout_toRightOf="@+id/editText1"  
            android:text="Button" />  
       
        <EditText  
            android:id="@+id/editText1"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:layout_alignParentLeft="true"  
            android:layout_alignParentTop="true"  
            android:layout_marginLeft="16dp"  
            android:layout_marginTop="54dp"  
            android:ems="10" />  
      
    </RelativeLayout>
    LOGCAT

    codice:
    06-26 09:25:54.204: D/gralloc_goldfish(1415): Emulator without GPU emulation detected.
    06-26 09:25:57.814: D/AndroidRuntime(1415): Shutting down VM
    06-26 09:25:57.814: W/dalvikvm(1415): threadid=1: thread exiting with uncaught exception (group=0xb3aafba8)
    06-26 09:25:57.894: E/AndroidRuntime(1415): FATAL EXCEPTION: main
    06-26 09:25:57.894: E/AndroidRuntime(1415): Process: com.example.prova1, PID: 1415
    06-26 09:25:57.894: E/AndroidRuntime(1415): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.prova1/com.example.prova1.Page1}; have you declared this activity in your AndroidManifest.xml?
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1628)
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at android.app.Instrumentation.execStartActivity(Instrumentation.java:1424)
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at android.app.Activity.startActivityForResult(Activity.java:3424)
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at android.app.Activity.startActivityForResult(Activity.java:3385)
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:839)
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at android.app.Activity.startActivity(Activity.java:3627)
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at android.app.Activity.startActivity(Activity.java:3595)
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at com.example.prova1.MainActivity$1.onClick(MainActivity.java:33)
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at android.view.View.performClick(View.java:4438)
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at android.view.View$PerformClick.run(View.java:18422)
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at android.os.Handler.handleCallback(Handler.java:733)
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at android.os.Handler.dispatchMessage(Handler.java:95)
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at android.os.Looper.loop(Looper.java:136)
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at android.app.ActivityThread.main(ActivityThread.java:5017)
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at java.lang.reflect.Method.invokeNative(Native Method)
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at java.lang.reflect.Method.invoke(Method.java:515)
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
    06-26 09:25:57.894: E/AndroidRuntime(1415): 	at dalvik.system.NativeStart.main(Native Method)
    06-26 09:26:00.324: I/Process(1415): Sending signal. PID: 1415 SIG: 9

    Se può servire questa è Page1

    codice:
    package com.example.prova1;
    
    
    import android.os.Bundle;  
    import android.app.Activity;  
      
    public class Page1 extends Activity {  
      
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.page1);  
        }  
    }
    E questo il file xml

    codice:
    <?xml version="1.0" encoding="utf-8"?>  
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
       android:layout_width="match_parent"  
       android:layout_height="match_parent"  
       android:gravity="center|top"  
       android:orientation="vertical" >  
      
    <TextView  
       android:id="@+id/textView1"  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"  
       android:layout_marginTop="20dp"  
       android:clickable="false"  
       android:text="Ciao"  
       android:textSize="20dp" />  
      
    <EditText  
       android:id="@+id/editText1"  
       android:layout_width="234dp"  
       android:layout_height="wrap_content"  
       android:layout_marginTop="30dp"  
       android:ems="10"  
       android:hint="Enter your Birthdate" >  
    <requestFocus />  
    </EditText>  
      
    <Button  
       android:id="@+id/button1"  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"  
       android:layout_marginTop="10dp"  
       android:text="Submit" />  
    </LinearLayout>

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Tralascio tutto quello che c'è sopra (il FragmentManager e tutto il resto, che mi pare di capire che tu stia usando cose troppo complesse per il momento)... A quanto pare ora l'eccezione è diversa e ben più chiara: stai cercando di avviare una Activity (chiamata Page1) che non hai dichiarato nel manifest dell'App.

    Tutte le Activity vanno dichiarate nel Manifest dell'App per poter essere usate.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    106
    Ciao, l'errore nel logcat è chiaro
    ActivityNotFoundException
    probabilmente non hai aggiunto l'activity Page1 nel manifest...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.