-1

I'm trying to develop a very simple apk.
I'm using a textView to show two team's name that i enter in a previous activity (brought here with the intent that open this activity). When i try to use setText to show the names of these teams the apk crash.

This is the class that crash:

    public class MatchPage extends Activity {
private String locali= null;
private String ospiti= null;
private TextView localiTV;
private TextView ospitiTV;
private MatchRugby partita;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     
    setContentView(R.layout.match);
     localiTV =(TextView) findViewById(R.id.localiTV);
     ospitiTV =(TextView) findViewById(R.id.ospitiTV);
    getLocali();
    getOspiti();
    createMatch();



     localiTV.setText("Locali /n"+ partita.teamA.getName());
     ospitiTV.setText("Ospiti /n"+ partita.teamB.getName());




}

/**
 * Prende il nome della squadra locale dall'intent
 * @return
 */
public String getLocali(){
    Intent matchStart = getIntent();
    String locali = matchStart.getStringExtra(NewMatchPage.LOCALI);
    return locali;
}

/**
 * prende il nome della squadra ospite dall'intent
 * @return
 */
public String getOspiti(){
    Intent matchStart = getIntent();
    String ospiti = matchStart.getStringExtra(NewMatchPage.OSPITI);
    return ospiti;
}

public MatchRugby createMatch(){
    TeamRugby teamLocali= new TeamRugby(locali);
    TeamRugby teamOspiti= new TeamRugby(ospiti);
    MatchRugby partita= new MatchRugby(teamLocali, teamOspiti);
    return partita;
}
    }

This is the XML:

   <?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:orientation="vertical" >

<TextView
    android:id="@+id/localiTV"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:textAppearance="?android:attr/textAppearanceLarge" />


<TextView
    android:id="@+id/ospitiTV"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

This is the class that send the intent:

   public class NewMatchPage extends Activity {

public static final String LOCALI = null;
public static final String OSPITI = null;
   private Button startMatch;
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.new_match);

     startMatch= (Button) findViewById(R.id.startMatch);
        startMatch.setOnClickListener(new View.OnClickListener(){


            public void onClick(View arg0) {
                startMatch();

            }

        });
}

public void startMatch(){
    Intent startMatch= new Intent(this, MatchPage.class);

    //Prendo il testo scritto nella casella locali e la porto nella partita
    EditText locali= (EditText) findViewById(R.id.Locali);
    String locali1 = locali.getText().toString();
    startMatch.putExtra(LOCALI, locali1);
    //Prendo il testo scritto nella casella ospiti e la porto nella partita
    EditText ospiti= (EditText) findViewById(R.id.Ospiti);
    String ospiti1 = ospiti.getText().toString();
    startMatch.putExtra(OSPITI, ospiti1);
    //inizio la partita
    startActivity(startMatch);
}

    }

And finally that's the logcat log:

    04-24 16:49:08.928: W/dalvikvm(1377): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
    04-24 16:49:08.958: E/AndroidRuntime(1377): FATAL EXCEPTION: main
    04-24 16:49:08.958: E/AndroidRuntime(1377): java.lang.RuntimeException: Unable to start activity    ComponentInfo{com.gmail.david.corsalini.sportscout/com.gmail.david.corsalini.sportscout.MatchPage}: java.lang.NullPointerException
    04-24 16:49:08.958: E/AndroidRuntime(1377):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
    04-24 16:49:08.958: E/AndroidRuntime(1377):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
    04-24 16:49:08.958: E/AndroidRuntime(1377):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
    04-24 16:49:08.958: E/AndroidRuntime(1377):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
    04-24 16:49:08.958: E/AndroidRuntime(1377):     at android.os.Handler.dispatchMessage(Handler.java:99)
    04-24 16:49:08.958: E/AndroidRuntime(1377):     at android.os.Looper.loop(Looper.java:137)
    04-24 16:49:08.958: E/AndroidRuntime(1377):     at android.app.ActivityThread.main(ActivityThread.java:4424)
    04-24 16:49:08.958: E/AndroidRuntime(1377):     at java.lang.reflect.Method.invokeNative(Native Method)
    04-24 16:49:08.958: E/AndroidRuntime(1377):     at java.lang.reflect.Method.invoke(Method.java:511)
    04-24 16:49:08.958: E/AndroidRuntime(1377):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    04-24 16:49:08.958: E/AndroidRuntime(1377):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    04-24 16:49:08.958: E/AndroidRuntime(1377):     at dalvik.system.NativeStart.main(Native Method)
    04-24 16:49:08.958: E/AndroidRuntime(1377): Caused by: java.lang.NullPointerException
    04-24 16:49:08.958: E/AndroidRuntime(1377):     at com.gmail.david.corsalini.sportscout.MatchPage.onCreate(MatchPage.java:25)
    04-24 16:49:08.958: E/AndroidRuntime(1377):     at android.app.Activity.performCreate(Activity.java:4465)
    04-24 16:49:08.958: E/AndroidRuntime(1377):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
    04-24 16:49:08.958: E/AndroidRuntime(1377):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
    04-24 16:49:08.958: E/AndroidRuntime(1377):     ... 11 more

MatchRugby class

    public class MatchRugby {
public TeamRugby teamA;
public TeamRugby teamB;

/**
 * Costruttore della partita
 */
public MatchRugby(TeamRugby teamA, TeamRugby teamB){
    this.teamA=teamA;
    this.teamB=teamB;
}

/**
 * @return the teamA
 */
public TeamRugby getTeamA() {
    return teamA;
}


/**
 * @param teamA the teamA to set
 */
public void setTeamA(TeamRugby teamA) {
    this.teamA = teamA;
}


/**
 * @return the teamB
 */
public TeamRugby getTeamB() {
    return teamB;
}


/**
 * @param teamB the teamB to set
 */
public void setTeamB(TeamRugby teamB) {
    this.teamB = teamB;
}


public void EndOfMatch(){
    //nothing to do with the problem
    }
}
David Corsalini
  • 7,958
  • 8
  • 41
  • 66

3 Answers3

0
java.lang.NullPointerException
   at com.gmail.david.corsalini.sportscout.MatchPage.onCreate(MatchPage.java:25)

Seem that you partita object is null from the above error. And from your code where you are initializing it

createMatch();

replace the above method with below line

partita = createMatch();

Also you can change the following code::

public void createMatch(){
    TeamRugby teamLocali= new TeamRugby(locali);
    TeamRugby teamOspiti= new TeamRugby(ospiti);
    partita= new MatchRugby(teamLocali, teamOspiti);
} 
Shankar Agarwal
  • 34,573
  • 7
  • 66
  • 64
  • By doing this i get an error because the return type for createMatch is not MatchRugby (but void). By just replacing the method call with partita = createMatch(); i get a working activity, but the textview gives me "locali null" and "ospiti null". – David Corsalini Apr 24 '12 at 18:03
  • can you add your MatchRugby class might need to change ther – Shankar Agarwal Apr 24 '12 at 18:12
0

You have a NullPointerException at line #25 of your MatchPage class in onCreate method. Not sure which line exactly it is in the code you posted, but my best guess is your findViewById call fails to find anything.

devmiles.com
  • 9,895
  • 5
  • 31
  • 47
0

Your variable scoping is all off. set up your class like this:

public class MatchPage extends Activity {
private String locali= null;
private String ospiti= null;
private TextView localiTV;
private TextView ospitiTV;
private MatchRugby partita;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     
    setContentView(R.layout.match);
     localiTV =(TextView) findViewById(R.id.localiTV);
     ospitiTV =(TextView) findViewById(R.id.ospitiTV);
    getLocali();
    getOspiti();
    createMatch();

     localiTV.setText("Locali /n"+ partita.teamA.getName());
     ospitiTV.setText("Ospiti /n"+ partita.teamB.getName());

}

/**
 * Prende il nome della squadra locale dall'intent
 * @return
 */
public String getLocali(){
    if (locali == null) {
      Intent matchStart = getIntent();
      locali = matchStart.getStringExtra(NewMatchPage.LOCALI);
    }
    return locali;
}

/**
 * prende il nome della squadra ospite dall'intent
 * @return
 */
public String getOspiti(){
    if (ospiti == null) {
      Intent matchStart = getIntent();
      ospiti = matchStart.getStringExtra(NewMatchPage.OSPITI);
    }
    return ospiti;
}

public MatchRugby createMatch(){
    TeamRugby teamLocali= new TeamRugby(locali);
    TeamRugby teamOspiti= new TeamRugby(ospiti);
    partita = new MatchRugby(teamLocali, teamOspiti);
    return partita
}

  private String locali
  private String ospiti
  private MatchRugby partita
}
JRaymond
  • 11,625
  • 5
  • 37
  • 40
  • I don't see where you did change the code, you just add a duplicate of locali ospiti and partita at the end, or i'm not finding something? – David Corsalini Apr 24 '12 at 18:01
  • @DavidCorsalini Sorry, I didn't see your declarations at the top. you can ignore them at the end. The main change is in your functions going from: `MatchRugby partita = new MatchRugby(teamLocali, teamOspiti);` to `partita = new MatchRugby(teamLocali, teamOspiti);`. By adding in the type again, you created a local variable that only existed inside of your function and then was destroyed. removing the type points to the class level variable. do the same for locali and ospiti – JRaymond Apr 24 '12 at 18:06
  • This did the trick, thank you, now i just need to find where i messed up and used the ospiti value for setText on localiTV! – David Corsalini Apr 24 '12 at 19:14
  • @DavidCorsalini be sure to accept and/or upvote answers that fix/help your problem - and welcome to StackOverflow :) – JRaymond Apr 24 '12 at 19:47