2015-06-16 2 views
-1

Я работаю над Android-приложением и устанавливаю функцию фильтрации на Listview. Но я ниже ошибки:java.lang.NullPointerException: on android.widget.EditText.addTextchangedlistener

java.lang.RuntimeException: Невозможно начать деятельность componentInfo: java.lang.NullPointerException: Попытка вызвать виртуальный метод недействительным android.widget.EditText.addTextchangedListener (Android .text.TextWatcher) по объекту Null Ссылка

Ниже мой код.

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.shopdetail); 
    aq=new AQuery(this); 
    value=5; 



       GPSTracker gps = new GPSTracker(Shopdetail.this); 
        if(gps.canGetLocation()){ 
         double latitude = gps.getLatitude(); 
         double longitude = gps.getLongitude(); 
         getdatalatlog(latitude,longitude);      
        }else{ 
         gps.showSettingsAlert(); 
        }      
        Intent openStartingPoint=getIntent(); 
        String city=openStartingPoint.getStringExtra("spinnerText"); 
        bindcity(city); 

      final EditText inputSearch = (EditText)findViewById(R.id.inputSearch);      
        inputSearch.addTextChangedListener(new TextWatcher() { 

         @Override 
         public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 
          // When user changed the Text 
          //Shopdetail.this.adapter.getFilter().filter(cs); 
          //((SimpleAdapter)Shopdetail.this.adapter).getFilter().filter(cs); 

          // ((SimpleAdapter)getListAdapter()).getFilter().filter(cs); 

          //get the text in the EditText 
                        EditText inputSearch = (EditText)findViewById(R.id.inputSearch); 
          String searchString=inputSearch.getText().toString(); 
           int textLength=searchString.length(); 
           searchResults.clear(); 

           for(int i=0;i<mCommentList.size();i++) 
           { 
           String shopName=mCommentList.get(i).get(TAG_TITLE).toString(); 
           if(textLength<=shopName.length()){ 
           //compare the String in EditText with Names in the ArrayList 
           if(searchString.trim().equalsIgnoreCase(shopName.trim().substring(0,textLength))){ 
           searchResults.add(mCommentList.get(i)); 

           getdata();} 
           } 
           } 

           adapter.notifyDataSetChanged(); 
         } 

         @Override 
         public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
           int arg3) { 
          // TODO Auto-generated method stub 

         } 

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




    } 

     private void getdata() { 
    // TODO Auto-generated method stub 
    String[] data = new String[]{TAG_TITLE,TAG_USERNAME ,TAG_CONTACT ,TAG_MESSAGE ,TAG_LATITUDE , TAG_LONGITUDE }; 

    int[] to= new int[] {R.id.shop_name,R.id.address,R.id.contact,R.id.distance,R.id.latitude,R.id.longitude}; 

    final SimpleAdapter adapter = new SimpleAdapter(this, mCommentList,R.layout.single_post, data,to); 

    ListView lv = (ListView) findViewById(android.R.id.list); 
    lv.setAdapter(adapter); 

}` 

Ниже приведен мой код, чтобы в первую очередь привязать данные.

Blockquote

private void getdatalatlog(double latitude, double longitude) { 
    // TODO Auto-generated method stub 
    //value=5; 
    String url = "http://192.168.2.4/PHP/webservice/comments.php?latitude='"+latitude+"'&longitude='"+longitude+"'&value='"+value+"'"; 
    aq.progress(R.id.progressBar1).ajax(url, JSONObject.class, this,"jsonCallback"); 

} 

@SuppressWarnings("unchecked") 
public void jsonCallback(String url, JSONObject json, AjaxStatus status) { 


    if (json != null) { 


    List<String> city = new ArrayList<String>(); 
    mCommentList = new ArrayList<HashMap<String, Object>>(); 

     Gson gson = new GsonBuilder().create(); 
     try { 

     JSONArray jsonResponse = json.getJSONArray("posts"); 
      city = gson.fromJson(jsonResponse.toString(),List.class); 
      for (int i = 0; i < jsonResponse.length(); i++) { 
       JSONObject c = jsonResponse.getJSONObject(i);  

       String title = c.getString(TAG_TITLE); 
       String content = c.getString(TAG_MESSAGE); 
       String username = c.getString(TAG_USERNAME); 
       String lat = c.getString(TAG_LATITUDE); 
       String log = c.getString(TAG_LONGITUDE); 
       String cont = c.getString(TAG_CONTACT); 

       // creating new HashMap 
       HashMap<String, Object> map = new HashMap<String, Object>(); 

       map.put(TAG_TITLE, title); 
       map.put(TAG_MESSAGE, content); 
       map.put(TAG_USERNAME, username); 
       map.put(TAG_LATITUDE, lat); 
       map.put(TAG_LONGITUDE, log); 
       map.put(TAG_CONTACT, cont); 
        // adding HashList to ArrayList 
      mCommentList.add(map); 

      searchResults=new ArrayList<HashMap<String,Object>>(mCommentList); 
      //HashMap<String, String> map1 = new HashMap<String, String>(); 
      //map1.put(TAG_TITLE, title); 
      //sortdata; 


      } 
     } 
     catch (JSONException e) { 

      Toast.makeText(aq.getContext(), "Error in parsing JSON", Toast.LENGTH_LONG).show(); 
     } 
     catch (Exception e) { 
      Toast.makeText(aq.getContext(), "Something went wrong", Toast.LENGTH_LONG).show(); 
     } 


     String[] data = new String[]{TAG_TITLE,TAG_USERNAME ,TAG_CONTACT ,TAG_MESSAGE ,TAG_LATITUDE , TAG_LONGITUDE }; 

     int[] to= new int[] {R.id.shop_name,R.id.address,R.id.contact,R.id.distance,R.id.latitude,R.id.longitude}; 

     final SimpleAdapter adapter = new SimpleAdapter(this, mCommentList,R.layout.single_post, data,to); 

     ListView lv = (ListView) findViewById(android.R.id.list); 
     lv.setAdapter(adapter); 




     lv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 

       Intent intent = new Intent(); 
       Bundle b = new Bundle(); 


       String name= ((TextView) view.findViewById(R.id.shop_name)).getText().toString()+" , "+((TextView) view.findViewById(R.id.contact)).getText().toString(); 

       String lati= ((TextView) view.findViewById(R.id.latitude)).getText().toString(); 

       String longi= ((TextView) view.findViewById(R.id.longitude)).getText().toString(); 

       b.putString("shop",name); 
       b.putString("lati",lati); 
       b.putString("long",longi); 
       intent.setClass(Shopdetail.this, Mapview.class); 
       intent.putExtras(b); 
       startActivity(intent); 
      } 
     }); 



} 

}

, когда тип письма пользователя на EditText данные фильтруются и его связывания в ListView в соответствии с этим. Это не работает. Пожалуйста, направляйте меня.

Большое спасибо.

ответ

1

метод Вызывающую на нулевой объект всегда будет бросать java.lang.N ullPointerException.

В вашем случае в журналах четко указывается «Попытка вызвать метод addTextchangedListener (android.text.TextWatcher) в ссылке« Нулевой объект »».

Короче - inputSearch имеет значение null и должен быть инициализирован перед любыми вызовами метода.

+0

Я проверяю его путем отладки, когда я пишу одну букву, он войдет в метод Textchanged и когда строка будет соответствовать данным, она также будет выполнена отлично. Проблема заключается только в файле adapter.notifyDataSetChanged() ;. Пожалуйста, направляйте меня. – user4417231

+0

Как было предложено @MD, переместите 'EditText inputSearch = (EditText) findViewById (R.id.inputSearch);' перед 'inputSearch.addTextChangedListener (новый TextWatcher() {'. [См. Примеры кода] (http: //www.mysamplecode .com/2012/06/android-edittext-text-change-listener.html) – Rajesh

+0

Я уже положил его перед inputSearch.addTextChangedListener – user4417231

7

Вы забыли инициализировать inputSearch

inputSearch=(EditText)findViewById(R.id.editTextId); 

ИЛИ будут сдвинуты

EditText inputSearch = (EditText)findViewById(R.id.inputSearch); 

перед

inputSearch.addTextChangedListener(new TextWatcher() { 
+0

, когда я печатаю что-либо на EditText, вы увидите много ошибок на logcat и главной ошибке из-за адаптера.notifyDataSetChanged(); эта линия. – user4417231

Смежные вопросы