Android 每次EditText更改时使用AsyncTask查询API
我创建了一个Android 每次EditText更改时使用AsyncTask查询API,android,asynchronous,android-asynctask,retrofit,Android,Asynchronous,Android Asynctask,Retrofit,我创建了一个AsyncTask,每当用户在EditText中输入内容时,我都会查询RESTAPI。这导致当用户不断键入时,大量请求被发送到RESTAPI。我有没有办法控制发送的请求?AsyncTask是这里的最佳解决方案吗?我的其他选择是什么 代码如下: private AsyncTask<Object, Object, Response> searchTask; @Override public void afterTextChanged(Editable s) { th
AsyncTask
,每当用户在EditText
中输入内容时,我都会查询RESTAPI。这导致当用户不断键入时,大量请求被发送到RESTAPI。我有没有办法控制发送的请求?AsyncTask
是这里的最佳解决方案吗?我的其他选择是什么
代码如下:
private AsyncTask<Object, Object, Response> searchTask;
@Override
public void afterTextChanged(Editable s) {
this.search(s.getText().toString());
}
public void search(final String q) {
if (searchTask != null) {
searchTask.cancel(true);
}
searchTask = new AsyncTask<Object, Object, Response>() {
@Override
protected void onPreExecute() {
}
@Override
protected List<Transaction> doInBackground(Object... params) {
return retrofitService.findPerson(token, q);
}
@Override
protected void onPostExecute(Response response) {
// do stuff here with the response
}
};
searchTask.execute();
}
私有异步任务搜索任务;
@凌驾
公共无效后文本已更改(可编辑){
this.search(s.getText().toString());
}
公共无效搜索(最终字符串q){
if(searchTask!=null){
searchTask.cancel(true);
}
searchTask=newasynctask(){
@凌驾
受保护的void onPreExecute(){
}
@凌驾
受保护列表doInBackground(对象…参数){
返回服务findPerson(令牌,q);
}
@凌驾
受保护的void onPostExecute(响应){
//在这里做一些有反应的事情
}
};
searchTask.execute();
}
使用volley库,而不是编写执行方法。这是链接您是否尝试过“IME\u ACTION\u DONE”上的搜索任务?要快速修复,如果您尝试自动完成,您只需对输入的第一个字母进行api调用,对于其他输入更改,您可以在api调用的结果列表中进行搜索。