setText使apk崩溃

时间:2012-04-24 17:13:15

标签: java android android-layout settext

我正在尝试开发一个非常简单的apk 我正在使用textView来显示我在之前的活动中输入的两个团队名称(带有打开此活动的意图)。 当我尝试使用setText来显示这些团队的名字时,apk崩溃。

这是崩溃的类:

    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;
}
    }

这是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>

这是发送意图的类:

   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);
}

    }

最后那是logcat日志:

    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类

    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
    }
}

3 个答案:

答案 0 :(得分:0)

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

似乎你的partita对象从上面的错误中为空。从您初始化它的代码

createMatch();

用下面的行替换上面的方法

partita = createMatch();

您还可以更改以下代码::

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

答案 1 :(得分:0)

NullPointerException方法中MatchPage类的第25行onCreate findViewById。不确定你发布的代码中究竟是哪一行,但最好的猜测是{{1}}调用无法找到任何内容。

答案 2 :(得分:0)

您的变量范围全部关闭。像这样设置你的课程:

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
}