2011-03-31 8 views
1

Cher Stack Overflow Communauté,findViewById exception de pointeur nul

Je tente d'obtenir la date d'un datepicker et le définir comme une chaîne avec le code situé en dehors de la méthode onCreate. Voici mon code:

DatePicker dp =(DatePicker)findViewById(R.id.datePickerControl); 
String date_picker_message= (dp.getMonth()+1) +"/"+dp.getDayOfMonth()+"/"+dp.getYear() ; 

Cependant, lorsque je tente d'utiliser ce code, il est conforme sans erreur, mais se bloque avec ce message:

03-30 22: 51: 20,719: ERREUR/AndroidRuntime (4954): Causée par: java.lang.NullPointerException

Je pense que c'est peut-être parce que je n'ai pas défini la vue de contenu et mon code tente de trouver une vue qui n'existe pas encore. Mais comment ferais-je cela en dehors de la méthode onCreate?

Si je crie sur l'autoroute de wrongness, s'il vous plaît laissez-moi savoir et me diriger vers la bonne façon de le faire.

+0

Fichier de mise en page et méthode onCreate() complète. – Karan

Répondre

2

Merci à tous pour vos réponses! Le problème a été résolu de ma part. L'objectif était d'obtenir la valeur d'un sélecteur de dates et d'utiliser cette valeur dans une instruction SQL WHERE. Je n'aime pas les variables placées au hasard dans le code alors que la méthode qui utilise cette variable est entièrement ailleurs. Le regroupement logique des variables et des méthodes qui les utilisent est logique pour moi.

Le code ci-dessous explique comment j'ai résolu le problème.

public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.show_events: 
     try { 
      DatePicker dp=(DatePicker)findViewById(R.id.datePickerControl); 

      if ((dp.getMonth()+1) < 10) { 

       String date_picker_value = "0"+(dp.getMonth()+1) +"/"+dp.getDayOfMonth()+"/"+dp.getYear(); 
       Cursor cursor = getEvents(date_picker_value); 
       showEvents(cursor); 
       Toast.makeText(view.this, date_picker_value, Toast.LENGTH_SHORT).show(); 
      } 
      else { 

       String date_picker_value = (dp.getMonth()+1) +"/"+dp.getDayOfMonth()+"/"+dp.getYear(); 
       String date_picker_value="Showing events for: " + date_picker_value; 
       Cursor cursor = getEvents(date_picker_value); 
       showEvents(cursor); 
       Toast.makeText(view.this, date_picker_value, Toast.LENGTH_SHORT).show(); 
      } 


     } 
     finally { 
      events.close(); 
     } 
     break; 
    } 
+0

Vous vous êtes vraiment trompé. –

3
DatePicker dp =(DatePicker)findViewById(R.id.datePickerControl); 

Declare date Allez dans votre classe ... lsinitialisez à l'intérieur sur la création méthode. Utilisez-le où vous voulez.

Exemple de code:

public class youractivity extends Activity { 
DatePicker dp; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    dp =(DatePicker)findViewById(R.id.datePickerControl); 
} 
private return_type yourmethod(Arguments) 
{ 
String date_picker_message= (dp.getMonth()+1) +"/"+dp.getDayOfMonth()+"/"+dp.getYear() ; 
} 
} 
+0

dans ce cas, il pourrait être approprié de vérifier sur l'objet dp nul, attraper ou lancer NullPointerException à l'endroit où vous utilisez l'objet. Mais de toute façon je ne peux pas comprendre le but de vue useing n'a pas été créé – Maxim

+1

oui de-bien sûr ... Il a besoin de le faire .. Je ne peux pas tout faire pour lui ... –

+1

..... ....Merci. Ta condescendance m'a aidé malgré tout. – Jevarlo

0

Vous devriez registrer auditeur onClick pour le DatePicker. Vous pouvez lire le tutoriel this .