Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 每次EditText更改时使用AsyncTask查询API_Android_Asynchronous_Android Asynctask_Retrofit - Fatal编程技术网

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调用的结果列表中进行搜索。