2011-03-13 3 views
0

Je suis assez nouveau pour le développement Android, et j'ai une question rapide sur un NullPointerException. Lorsqu'un bouton est pressé à partir de la première page d'activité, il passe à la deuxième activité, où il y a un NullPointerException. Voici le code pour le main.xml « Suivant » (celui qui est pressé pour passer des activités):NullPointerException lors de la modification des activités

<Button 
      android:id="@+id/ButtonNext" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/next" 
      android:onClick="next"> 
     </Button> 

Voici le code pour la première activité:

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 

public class CalorieIntakeCalculator extends Activity { 
    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 

    } 

    public void next(View view) { 
     Intent intentExercise = new Intent(view.getContext(), Exercise.class); 
     startActivityForResult(intentExercise, 0); 
    } 
} 

Lorsque le « suivant » bouton est pressé, il passe à l'activité de l'exercice:

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 

public class Exercise extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.exercise); 

     final EditText weightField = (EditText) findViewById(R.id.EditTextWeight); 
     try { 
      ((Global) this.getApplication()).setWeight(Integer.parseInt(weightField.getText().toString())); 
     } catch(NumberFormatException nfe) { 
      System.out.println("Could not parse " + nfe); 
     } 

Dans la classe d'exercice, je suis en train de la ContentView à exercise.xml. Dans les prochaines instructions, je souhaite définir le poids entier global sur le nombre que l'utilisateur place dans la zone EditTextWeight EditText. Voici le code dans le fichier Global.java, qui étend Appllication et rend les variables globales:

import android.app.Application; 

public class Global extends Application { 
    private int weight; 
    private int age; 
    private int feet; 
    private int inches; 


     //START WEIGHT 
     public int getWeight() { 
      return weight; 
     } 

     public void setWeight(int weight) { 
      this.weight = weight; 
     } 
     //END WEIGHT 


     //START AGE 
     public int getAge() { 
      return age; 
     } 

     public void setAge(int age) { 
      this.age = age; 
     } 
     //END AGE 


     //START FEET 
     public int getFeet() { 
      return feet; 
     } 

     public void setFeet(int feet) { 
      this.feet = feet; 
     } 
     //END FEET 


     //START INCHES 
     public int getInches() { 
      return inches; 
     } 

     public void setInches(int inches) { 
      this.inches = inches; 
     } 
     //END INCHES 
} 

Lorsque je tente et lancer le programme dans un émulateur, le programme se bloque. Je regardais dans LogCat et trouvé les NullPointerException en utilisant points d'arrêt dans cette ligne exercise.java:

((Global) this.getApplication()).setWeight(Integer.parseInt(weightField.getText().toString())); 

Merci :) ~

Répondre

1

Si vous souhaitez conserver l'état dans votre application, je vous suggère fortement de voir si SharedPrefrences système.

de toute activité ou service dans votre application, vous pouvez accéder aux préférences partagées en faisant:

final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

Vous pouvez aussi facilement un PreferencesActivity pour modifier les paramètres sans avoir à écrire beaucoup de code.

+1

Merci beaucoup! Il semble que cela fonctionnerait pour moi :) Malheureusement, je pourrais avoir à réécrire tout le code lol. Mais oui, je vais y jeter un coup d'œil: D – koysean

1

Astuce générale pour pointeur nul Exceptions.

  1. Ouvrir la perspective de débogage dans Eclipse
  2. Choisissez l'onglet Affichage 'points d'arrêt'.
  3. Sélectionnez le 'Ajouter un point d'arrêt d'exception Java' et choisissez NullPointerException.
  4. Lancez votre activité, soit en utilisant 'Debug As ...' soit en attachant le débogueur à une instance en cours d'exécution via DDMS.
  5. Exécutez le flux de production incriminé. Il se cassera sur la ligne que a causé le NPE.
+0

J'ai corrigé un problème que j'avais - merci! –

Questions connexes