2015-04-06 64 views
1

我使用EditText,ListView,JSON和数据库创建一个简单的搜索活动,每当我在EditText中输入文本时,listview必须更新(我正在使用mysql,Select query LIKE),其中ListView包含使用JSON的数据库中的项目,项目必须使用LIKE方法从给定条件更新,但每次输入文本时都会在ListView中复制项目。Android搜索Listview从JSON使用EditText复制项目

inputSearch.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 
      name = inputSearch.getText().toString(); 
      searcher(name); 

     } 

     @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 
     } 
    }); 

    String result; 

private void searcher(String searched){ 

    class searching extends AsyncTask<String, Void, String>{ 
     @Override 
     protected String doInBackground(String... params) { 

      String paramSearched = params[0]; 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpGet httpGet = new HttpGet("http://....p.com/searchD.php?name=" + paramSearched); 
      try { 
       HttpResponse httpResponse = httpClient.execute(httpGet); 
       InputStream is = httpResponse.getEntity().getContent(); 
       InputStreamReader inputStreamReader = new InputStreamReader(is); 
       BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 
       StringBuilder stringBuilder = new StringBuilder(); 
       String line = null; 
       while ((line = bufferedReader.readLine()) != null) { 
        stringBuilder.append(line + "\n"); 
       } 
       result = stringBuilder.toString(); 
      }catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      try{ 

       JSONObject obj = new JSONObject(result); 
       nameslist = obj.getJSONArray("list"); 
       for(int i = 0; i < nameslist.length(); i++){ 
        JSONObject c = nameslist.getJSONObject(i); 
        String id = c.getString("ID"); 
        String name = c.getString("Name"); 

        HashMap<String, String> map = new HashMap<String, String>(); 
        map.put("ID", id); 
        map.put("Name", name); 

        listofnames.add(map); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(Search.this); 
      pDialog.setMessage("Searching Name. Please wait..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 
     @Override 
     protected void onPostExecute(String s) { 
      pDialog.dismiss(); 

      runOnUiThread(new Runnable() { 
       public void run() { 
        ListAdapter adapter = new SimpleAdapter(
          Search.this, listofnames, 
          R.layout.list_item1, new String[]{"ID", 
          "Name"}, 
          new int[]{R.id.pid, R.id.name}); 

        lv.setAdapter(adapter); 
       } 
      }); 
      adapter.notifyDataSetChanged(); 

     } 
    } 
     searching sh = new searching(); 
    sh.execute(searched); 
} 

回答

0

我想你应该清除“listofnames”列表中添加新数据之前将它保持最新的列表数据和不重复。

相关问题