2013-04-10 6 views
0

Dans mon application, il existe deux AutoCompleteTextView et un Button pour calculer une certaine opération. Je règle le Button en réponse aux deux AutoCompleteTextView dans le sens où, si les deux AutoCompleteTextView sont remplis, alors seulement le Button apparaîtra.Exception de pointeur nul: addTextChangedListener

En procédant ainsi, j'obtiens une exception Null Pointer. Le programme est comme suit:

boolean isLocation=false; 
boolean isDestination=false; 

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     location=(AutoCompleteTextView)findViewById(R.id.locale); 
     location.setAdapter(new PlacesAutoCompleteAdapter(this, R.layout.list_item)); 
     location.setOnItemClickListener(new OnItemClickListener() 

    { 

    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
      // TODO Auto-generated method stub 
      place1 = (Places) adapterView.getItemAtPosition(position); 
      location.setText(place1.description); 
      location.clearFocus(); 
      destination.requestFocus(); 
      Log.d("AutoCompleteTask", location.getText().toString()); 
       } 
    }); 

    location.addTextChangedListener(new TextWatcher() 
    { 

     @Override 
     public void afterTextChanged(Editable arg0) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 
      // TODO Auto-generated method stub 
      fillLocation=true; 
     } 

    }); 


    destination = (AutoCompleteTextView)findViewById(R.id.destination); 
    destination.setAdapter(new PlacesAutoCompleteAdapter(this, R.layout.list_item)); 
    destination.setOnItemClickListener(new OnItemClickListener() 
    { 

    @Override 
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
       // TODO Auto-generated method stub 
      place2 = (Places) adapterView.getItemAtPosition(position); 
      destination.setText(place2.description); 
      destination.clearFocus(); 
      calculate.requestFocus();    
      Log.d("AutoCompleteTask2", destination.getText().toString()); 
       } 
    }); 

    destination.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      // TODO Auto-generated method stub 
      fillDestination=true; 
     } 
    }); 

    if(fillLocation==true || fillDestination==true) 
    { 
     calculate.setVisibility(View.VISIBLE); 
    } 
    else 
    { 
     calculate.setVisibility(View.INVISIBLE); 
    } 


    calculate = (Button)findViewById(R.id.calculate); 
    calculate.setOnClickListener(new View.OnClickListener() { 



      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 

      if(location.getText().toString().length()<1 || destination.getText().toString().length()<1) 
      { 
       Toast.makeText(getApplicationContext(), "Give values before placing a query", Toast.LENGTH_LONG).show(); 
      } 
      else{ 
       @SuppressWarnings("deprecation") 
       String url = "http://maps.googleapis.com/maps/api/distancematrix/json?origins="+URLEncoder.encode(location.getText().toString())+"&destinations="+URLEncoder.encode(destination.getText().toString())+"&unit=metric&mode=driving&sensor=false"; 
       new ReadDistanceJSONFeedTask().execute(url); 
       } 
      } 
     }); 

Être nouveau pour le développement d'applications, ce qui est ce exception de pointeur nul? Puis-je avoir une aide s'il vous plait ?

+0

peut-être mettre calculate = (Bouton) findViewById (R.id.calculate); après setContentView(); vous devriez mettre logCat dans – JRowan

+0

s'il vous plaît mettre chat chat – edwin

Répondre

0

Vous obtenez un NPE à cause de cela: -

if(fillLocation==true || fillDestination==true) 
{ 
    calculate.setVisibility(View.VISIBLE); // NPE here 
} 
else 
{ 
    calculate.setVisibility(View.INVISIBLE); // NPE here 
} 
calculate = (Button)findViewById(R.id.calculate); 

Vous avez essayé de définir la visibilité du bouton de calcul, avant même de l'initialiser. Déplacer calculate = (Button)findViewById(R.id.calculate); au-dessus du if-else bloquer & cela devrait fonctionner.

+0

merci qui a résolu à peu près cette erreur. –

+0

Toujours heureux de vous aider! – SudoRahul

0

Une exception de pointeur nul se produit lorsque quelque chose dans votre code renvoie null

par exemple si vous avez:

int count; 
String[] biz = {"hand","is","hammer"} 

puis vous essayez de le faire:

String isnt = biz[count]; 

si vous n'a pas initialisé le nombre de variables comme:

count = 1; 

puis

String isnt = biz[count]; 

jetterait une exception de pointeur nul parce que rien n'a été réglé à compter

+0

merci l'homme, je pense que je comprends maintenant ... erreur idiote. –

+0

aucun problème, heureux d'aider – JRowan

0

Il lance NullPointerException car votre calculate = (Button)findViewById(R.id.calculate); non visible le place dans votre méthode onCreate() après le setContentView().

+0

merci, je crois que je comprends. –