Autore Topic: Errore in apertura di un activity da bottone  (Letto 491 volte)

Offline Jybo14

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Sistema operativo:
    Windows 7
Errore in apertura di un activity da bottone
« il: 19 Febbraio 2014, 12:43:14 CET »
0
Salve a tutti,
sto in questi giorni iniziando a programmare applicazioni Android, e per farlo seguo varia documentazione che trovo sul web.
Uno dei primi esempi è quello di creare un progetto con 2 activity, e tramite un bottone presente sulla prima, aprire la seconda. Una cosa semplice, direi addirittura banale, ma che, ohimé, mi provoca un errore che non riesco a risolvere  :-(
Posto qui il codice sperando in un aiuto da chi è più esperto!  :-)

XML della prima activity:
Codice (XML): [Seleziona]
<RelativeLayout

   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin"
   tools:context="com.example.aprirenuovaactivity.main$PlaceholderFragment">

    <Button
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/messaggio_bottone"
       android:id="@+id/btnVai"
       android:layout_alignParentTop="true"
       android:layout_centerHorizontal="true"
       android:layout_marginTop="106dp"
       android:width="200dp"
       android:height="115dp"
   />

</RelativeLayout>

XML della seconda:
Codice (XML): [Seleziona]
<RelativeLayout

   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin"
   tools:context="com.example.aprirenuovaactivity.altro$PlaceholderFragment">

</RelativeLayout>

Java della prima activity:
Codice (Java): [Seleziona]
package com.example.aprirenuovaactivity;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.widget.Button;
import android.widget.RelativeLayout;

public class main extends ActionBarActivity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_main);


        if (savedInstanceState == null)
        {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                    .commit();
        }

        Button bottone = (Button) findViewById(R.id.btnVai);
        bottone.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                Intent apri = new Intent(main.this, altro.class);
                startActivity(apri);
            }
        });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
       
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings)
        {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */

    public static class PlaceholderFragment extends Fragment
    {

        public PlaceholderFragment()
        {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState)
        {
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);
            return rootView;
        }
    }

}

Java della seconda:
Codice (Java): [Seleziona]
package com.example.aprirenuovaactivity;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
import android.widget.Button;

public class altro extends ActionBarActivity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_altro);

        if (savedInstanceState == null)
        {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                    .commit();
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
       
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.altro, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings)
        {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */

    public static class PlaceholderFragment extends Fragment
    {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState)
        {
            View rootView = inflater.inflate(R.layout.fragment_altro, container, false);
            return rootView;
        }
    }

}

Manifest:
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.aprirenuovaactivity" >

    <application
       android:allowBackup="true"
       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name"
       android:theme="@style/AppTheme" >
        <activity
           android:name="com.example.aprirenuovaactivity.main"
           android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
           android:name="com.example.aprirenuovaactivity.altro"
           android:label="@string/title_activity_altro" >

        </activity>
    </application>

</manifest>

Ecco, se provo ad avviare l'applicazione commentando in questo modo il setOnClickListener del bottone

Codice (Java): [Seleziona]
Button bottone = (Button) findViewById(R.id.btnVai);
        /*bottone.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                Intent apri = new Intent(main.this, altro.class);
                startActivity(apri);
            }
        });*/

nessun problema, l'applicazione parte e naturalmente non fa nulla.
Se invece lo lascio non commentato, l'applicazione non parte per niente, e il LogCat stampa i seguenti errori:

02-19 12:40:31.214  26766-26766/com.example.aprirenuovaactivity E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.aprirenuovaactivity/com.example.aprirenuovaactivity.main}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.example.aprirenuovaactivity.main.onCreate(main.java:37)
            at android.app.Activity.performCreate(Activity.java:5133)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)

Non specifico le API utilizzate perché ho provato in diversi modi (con API 16, 17, 18), e in ogni caso non va, quindi non penso dipenda da questo.
Non so, probabilmente sarà un errore banale vista la banalità del programma, però non so proprio dov'è questo banale errore :-(
Grazie a tutti anticipatamente, scusate se ho fatto qualche errore nell'aprire questo topic.
« Ultima modifica: 19 Febbraio 2014, 12:45:06 CET da Jybo14 »

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:Errore in apertura di un activity da bottone
« Risposta #1 il: 19 Febbraio 2014, 12:55:44 CET »
0
Il logcat ti dice che alla riga 37 di main.java stai usando qualcosa che è null.

Citazione
     Caused by: java.lang.NullPointerException
            at com.example.aprirenuovaactivity.main.onCreate(main.java:37)

Contando ad occhio dovrebbe essere dove imposti il listener di bottone:

Codice (Java): [Seleziona]
Button bottone = (Button) findViewById(R.id.btnVai);
bottone.setOnClickListener(new View.OnClickListener()

Come se btnVai non fosse corretto oppure non fosse nel layout dell'activity.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Jybo14

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Sistema operativo:
    Windows 7
Re:Errore in apertura di un activity da bottone
« Risposta #2 il: 19 Febbraio 2014, 13:00:27 CET »
0
Già, il problema dovrebbe essere lì, anche perché escludendo quella parte di codice tutto va senza problemi! (Oddio tutto, se togli quello all'applicazione non rimane niente, ma comunque parte!)
Solo che, per quello che ho potuto verificare io, è tutto a posto, nel'XML della prima activity il bottone c'è (come si vede anche dal codice postato), e io non so che cos'altro bisogna controllare :-(
Vorrei risolvere questo problema perché, non funzionando una cosa basilare come l'utilizzare un click di un bottone, non posso partire a sperimentare piano piano la programmazione Android.. :-(