我正在使用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);
}
答案 0 :(得分:0)
我认为您应该在向其添加新数据之前清除“listofnames”列表,以使列表数据保持最新且不重复。