Задержка автозаполнения
я должен установить автозаполнение для моего приложения.
мы уже поняли операцию AutoCompleteTextView, но яя хотел бы динамически изменитьString[]
используется для автодополнения Android.
Что я хочу сделать: вызвать страницу PHP, которая даст мнеString[]
что я'Я буду использовать в моем AutoCompleteTextView, но я хочу сделать это ТОЛЬКО, если клавиша была нажата, по крайней мере, через 500 миллисекунд после последней.
Хорошо, я был неправ. Я хочу, чтобы моя асинхронная работа выполнялась, если в течение 500 миллисекунд после последнего нажатия была нажата NO KEY (вы знаете, чтобы избежать перегрузки наших серверов, вызывая запрос для каждого набранного символа).
Вот как я думаюсделаю:
zipBox.setAdapter(myAdapter); //zipBox is an AutoCompleteTextView
zipBox.addTextChangedListener(new TextWatcher(){
@Override
public void onTextChanged(CharSequence s,
int start, int before, int count){
d = new Date();
GetAutocompletion ac = new GetAutocompletion();
ac.execute(zipBox.getText().toString());
}
// Other methods to implement
});
private class GetAutocompletion extends AsyncTask{
@Override
protected String doInBackground(String... params){
//adapter.notifyDataSetChanged();
try{
wait(500);
} catch(InterruptedException e){}
Date d1 = new Date();
if(d1.getTime() - d.getTime() > 500){
String res = "";
try{
URLConnection conn = new URL("myUrl.php?term=" + params[0]).openConnection();
InputStream in = conn.getInputStream();
Scanner s = new Scanner(in).useDelimiter("\\A");
while (s.hasNext())
res += s.next();
s.close();
in.close();
} catch(Exception e){ Log.d("eduine", "error during autocompletion receive"); }
return json;
} else return null;
}
@Override
protected void onPostExecute(String result){
super.onPostExecute(result);
Log.d("eduine", "json result : " + result);
}
}
Как вы думаете? Могу ли я использовать класс Timer?