Android Search Listview使用EditText从JSON复制项目

时间:2015-04-06 23:48:25

标签: java android json

我正在使用EditText,ListView,JSON和Database创建一个简单的搜索活动,每次我在EditText中输入文本时,listview必须更新(我使用mysql,选择查询LIKE),其中包含Items的ListView从使用JSON的数据库中,必须使用LIKE方法从给定条件更新项目,但每次输入文本时它都会在ListView中保留重复项目。

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

1 个答案:

答案 0 :(得分:0)

我认为您应该在向其添加新数据之前清除“listofnames”列表,以使列表数据保持最新且不重复。