2010-11-04 6 views
1

S'il vous plaît, aidez-moi ...NullPointerException ... Pourquoi?

public class TestActivity extends PreferenceActivity { 
/********/ 
      mTestPref = findPreference("test_preference"); 
      mTestPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 

     @Override 
     public boolean onPreferenceClick(Preference preference) { 
     // TODO Auto-generated method stub 
     String Message = mMessagePref.getSummary().toString(); 

     MainActivity main = new MainActivity(); 
     main.execute(Message); 

     return true; 
     } 
    }); 
    } 

    public class MainActivity extends Activity { 
    /************/ 

    public void execute(String message) { 

     Toast.makeText(getBaseContext(), message, Toast.LENGTH_SHORT).show(); // NullPointerExcepiton 
    } 
    } 

11-04 16:50:12.317: ERROR/AndroidRuntime(19524): Uncaught handler: thread main exiting due to uncaught exception 
11-04 16:50:12.356: ERROR/AndroidRuntime(19524): java.lang.NullPointerException 
11-04 16:50:12.356: ERROR/AndroidRuntime(19524):  at android.widget.Toast.<init>(Toast.java:89) 
+1

Vous avez tenté d'utiliser 'null'. Si 'Toast' est une bibliothèque, vous avez peut-être envoyé' null' comme l'un des arguments. Êtes-vous sûr que c'était dû aux lignes affichées? – Kobi

+0

Quelles sont les valeurs de getBaseContext(), message et Toast.LENGTH_SHORT? Cela devrait vous dire, espérons-le, ce qui se passe. – Scott

+0

Ceci est à propos d'Android, alors s'il vous plaît le marquer comme tel. (Fait cela pour vous cette fois.) – EboMike

Répondre

2
  1. Ne pas utiliser getBaseContext. Une activité est un contexte. Utilisez simplement this.
  2. Vérifiez que la chaîne que vous utilisez n'est pas NULL.
  3. Vous ne créez pas d'objets d'activité vous-même. Vous devez faire faire cela par le système d'exploitation via startActivity.
0

Depuis que vous avez créé l'activité principale, le contexte de base n'est pas défini. Peut-être que vous pouvez ajouter:

main.setBaseContext(this); 

avant

main.execute(Message); 

Mais votre programme tout fait un peu bizarre. Pourquoi avez-vous besoin de créer une activité pour exécuter quelque chose? Si vous devez démarrer une autre activité, utilisez startActivity(). Si vous en avez besoin pour exécuter quelque chose immédiatement, vous devriez transmettre ces 'paramètres' via l'Intention.

+0

Je ne pense pas que la création d'une activité va fonctionner. En outre, même si le contexte de base était défini, il serait toujours complètement non initialisé. Je suppose qu'il faut plus que simplement appeler le constructeur pour faire fonctionner un contexte. – EboMike

0

Vous NE POUVEZ PAS simplement appeler la nouvelle MyActivity(). Ce n'est pas comme ça que les activités sont créées. Vous ne pouvez JAMAIS, JAMAIS appeler nouveau sur une classe qui étend l'activité.

Vous ne pouvez pas appeler les méthodes d'instance d'activités d'autres classes.

Questions connexes