2015-01-12 17 views
20

Questo è quello che sto cercando di fare per diverse ore: Ho un file MainActivity.java (elencato di seguito) e un file fragment_start.xml con un pulsante Start. Toccando il pulsante di avvio dovrebbe visualizzare il file activity_main.xml con punti/round e countdown-Textviews. Non funziona e questo è ciò che sta accadendo: PID:: 1240 java.lang.NullPointerException: Tentativo di richiamare il metodo virtuale 'vuoto android.widget.TextView.setText (java.lang- java.lang.NullPointerException - setText su riferimento oggetto nullo

Il logcat mi dice .CharSequence) 'su un oggetto nullo di riferimento

L'emulatore visualizza: Sfortunatamente, GAME è stato arrestato.

Necessario dire che sono piuttosto nuovo nella programmazione?

Grazie per qualsiasi consiglio!

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 


public class MainActivity extends Activity implements View.OnClickListener { 

private int points; 
private int round; 
private int countdown; 

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

private void newGame() { 
    points=0; 
    round=1; 
    initRound(); 
} 

private void initRound() { 
    countdown = 10; 
    update(); 
} 

private void update() { 
    fillTextView(R.id.points, Integer.toString(points)); 
    fillTextView(R.id.round, Integer.toString(round)); 
    fillTextView(R.id.countdown, Integer.toString(countdown * 1000)); 
} 

private void fillTextView (int id, String text) { 
    TextView tv = (TextView) findViewById(id); 
    tv.setText(text); 
} 

private void showStartFragment() { 
    ViewGroup container = (ViewGroup) findViewById(R.id.container); 
    container.removeAllViews(); 
    container.addView(
      getLayoutInflater().inflate(R.layout.fragment_start, null)); 
    container.findViewById(R.id.start).setOnClickListener(this); 
} 

@Override 
public void onClick(View view) { 
    if(view.getId() == R.id.start) { 
     startGame(); 
    } 
} 

public void startGame() { 
    newGame(); 
} 
} 
+5

Distacco tutta eccezione messaggio/logcat aiuterebbe. – arleitiss

+0

Si prega di inviare i file xml. – Rohit5k2

+0

Guarda la mia risposta. La spiegazione non può essere più chiara, ma devi rintracciare te stesso perché fornisci un ID errato come paremeter (perché se esistesse una vista con questo ID, il metodo non restituirebbe null) – ProgrammingIsAwsome

risposta

15

qui sta il problema:

private void fillTextView (int id, String text) { 
    TextView tv = (TextView) findViewById(id); 
    tv.setText(text); // tv is null 
} 

-> (TextView) findViewById (id); // restituisce null Ma dal tuo codice, non riesco a trovare il motivo per cui questo metodo restituisce null. Prova a rintracciare, quale id tu dai come parametro e se questa vista con l'id specificato esiste.

Il messaggio di errore è molto chiaro e ti dice anche a quale metodo. Dalla documentazione:

public final View findViewById (int id) 
    Look for a child view with the given id. If this view has the given id, return this view. 
    Parameters 
     id The id to search for. 
    Returns 
     The view that has the given id in the hierarchy or null 

http://developer.android.com/reference/android/view/View.html#findViewById%28int%29

In altre parole: non si ha vista con l'id si dà come parametro.

19

Il problema è tv.setText (testo). La variabile tv è probabilmente nullo e tu chiami il metodo setText su quel null, che non puoi. Suppongo che il problema riguardi il metodo findViewById, ma non è qui, quindi non posso dirlo di più, senza il codice.

+0

Sì, questo è il problema. Il messaggio di errore è molto chiaro qui. – ProgrammingIsAwsome

+0

Puoi provare a verificare se hai dichiarato due o più textview con lo stesso ID – cammando

3
private void fillTextView (int id, String text) { 
    TextView tv = (TextView) findViewById(id); 
    tv.setText(text); 
} 

Se questo è dove stai ricevendo l'eccezione puntatore nullo, non c'era vista trovato per l'ID che avete passato in findViewById(), e l'eccezione effettiva viene generata quando si tenta di chiamare una funzione setText() su null . Dovresti pubblicare il tuo XML per R.layout.activity_main, poiché è difficile dire dove sono andate le cose semplicemente guardando il tuo codice.

Altro lettura sulla puntatori nulli: What is a NullPointerException, and how do I fix it?

Problemi correlati