2017-10-01 3 views
0

C'est le SearchView dans MainActivitySearchview.setOnQueryTextListener NullPointException

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String text) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String text) { 
      servantAdapter.getFilter().filter(text); 
      //Toast.makeText(MainActivity.this,text,Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
    }); 
} 

Et Voici l'adaptateur

public class ServantAdapter extends RecyclerView.Adapter<ServantAdapter.ViewHolder>implements Filterable { 
private List<Servant> mServant; 
@Override 
public Filter getFilter() {//The front omitted... 
    return new Filter() { 
     @SuppressWarnings("unchecked") 
     @Override 
     protected void publishResults(CharSequence constraint, FilterResults filterResults) { 
      mServant = (List<Servant>) filterResults.values; 
      ServantAdapter.this.notifyDataSetChanged(); 
     } 
     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 
      List<Servant> filteredResults = null; 
      if (constraint.length() == 0) { 
       filteredResults = mServant; 
      } else { 
       filteredResults = getFilteredResults(constraint.toString().toLowerCase()); 
      } 

      FilterResults results = new FilterResults(); 
      results.values = filteredResults; 

      return results; 
     } 

    }; 
} 
protected List<Servant> getFilteredResults(String constraint) { 
    List<Servant> results = new ArrayList<>(); 

    for (Servant item : mServant) { 
     if (item.getName().toLowerCase().contains(constraint)) { 
      results.add(item); 
     } 
    } 
    return results; 
} 

Pourquoi quand je lance ce programme et imput quelque chose dans le SearchView programme est fermé dowm et ReportErrors java.lang.NullPointerException: Tentative d'invocation de la méthode virtuelle 'android.widget .Filter com.example.a76959.tired.ServantAdapter.getFilter() 'sur une référence d'objet null

Mais si j'utilise le Toast dans le code, le programme peut fonctionner régulièrement et porter un toast au message que je saisis (I n'a pas pris le searchview dans Toolbar ou ActionBar, je l'ai seulement mis sur le dessus de recyclerview dans MainActivity.xml, je ne sais pas s'il a n'importe quel effet) Qui peut m'aider ... (Merci pour lire mon pauvre anglais Orz ..)

Répondre

0

Lorsque vous utilisez servantAdapter.getFilter().filter(text); assurez-vous que la variable servantAdapter a été correctement instanciée et n'est pas nulle.

Utilisation:

if (servantAdapter != null){ 
    servantAdapter.getFilter().filter(text); 
} 

Ou:

if (servantAdapter == null){ 
    servantAdapter = new servantAdapter(/*params*/); 
} 
servantAdapter.getFilter().filter(text); 
+0

Merci, le problème résolu, mais qu'est-ce que vous konw que dois-je faire la valeur de la servantAdapter est toujours nul ... –

+0

Si c'est un variable globale, en utilisant la 2ème approche, elle ne sera plus nulle jusqu'à ce que vous le fassiez explicitement. –