2012-04-24 3 views
-1

Я пытаюсь разработать очень простой apk.
Я использую textView, чтобы показать имя двух команд, которые я вхожу в предыдущую деятельность (приведенную здесь с намерением открыть эту операцию). Когда я пытаюсь использовать setText, чтобы показать имена этих команд, авария apk.setText make apk 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; 
} 
    } 

Это 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 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 класс

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

ответ

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

Я не вижу, где вы изменили код, вы просто добавляете дубликат locali ospiti и partita в конце, или я не нахожу что-то? –

+0

@DavidCorsalini Извините, я не видел ваших объявлений наверху. вы можете игнорировать их в конце. Главное изменение в ваших функциях происходит из: 'MatchRugby partita = new MatchRugby (teamLocali, teamOspiti);' to 'partita = new MatchRugby (teamLocali, teamOspiti);'. Снова добавив тип, вы создали локальную переменную, которая существовала только внутри вашей функции, а затем была уничтожена. удаляя точки типа переменной уровня класса. сделайте то же самое для locali и ospiti – JRaymond

+0

Это сделало трюк, спасибо, теперь мне просто нужно найти, где я испортил и использовал значение ospiti для setText на localiTV! –

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

Казаться, что вы партитура объект является недействительным из приведенной выше ошибки. А из вашего кода, где вы его инициализации

createMatch(); 

заменить вышеописанный метод с ниже линии

partita = createMatch(); 

Также вы можете изменить следующий код ::

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

Выполняя это, я получаю сообщение об ошибке, потому что возвращаемый тип для createMatch не является MatchRugby (но недействителен). Просто заменив вызов метода partita = createMatch(); я получаю рабочую активность, но textview дает мне «locali null» и «ospiti null». –

+0

Вы можете добавить свой MatchRugby класс, возможно, потребуется изменить ther –

+0

Добавлено на главный вопрос. –

0

У вас есть NullPointerException на линии № 25 вашего класса MatchPage в методе onCreate. Не уверен, какая строка именно в коде, который вы отправили, но мое лучшее предположение - ваш вызов findViewById не находит ничего.