【问题标题】:Using an AsyncTask for querying an API everytime an EditText changes每次 EditText 更改时使用 AsyncTask 查询 API
【发布时间】:2014-09-11 06:16:09
【问题描述】:

我创建了一个 AsyncTask 来在每次用户在 EditText 中输入内容时查询 REST API。这会导致在用户不断输入时向 REST API 发送大量请求。我有什么方法可以控制发送的请求吗? 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();
}

【问题讨论】:

  • 你试过“IME_ACTION_DONE”上的搜索任务吗?
  • 为了快速修复,如果您尝试自动完成,您可以只对输入的第一个字母进行 api 调用,对于其他输入更改,您可以在 api 调用的结果列表中搜索.

标签: android asynchronous android-asynctask retrofit


【解决方案1】:

不要编写执行方法,而是使用 volley 库。这是链接http://developer.android.com/training/volley/index.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多