0

我正在尝试开发一个应用程序,它使用来自 web 服务的 json 数据更新自动完成视图。

使用 textwatcher,我签入 ontextchanged 回调并创建一个异步任务对象,该对象对 web 服务进行非阻塞调用以获取结果。输入文本时,任何正在运行的 asynctask 对象都将被取消并生成一个新对象(因为 asynctask 是一种单例,我无法重新运行它)。

然后通过清除其 ArrayAdapter 并添加每个新项目,将结果添加到自动完成视图中。

问题是数据几乎永远不会从服务器中检索到,无论是由于不断取消还是其他原因。

是否有这样做的正确解决方案,或者有没有人成功地完成了这样的任务?

以下是相关的代码片段。文本观察器,

public void onTextChanged(CharSequence s, int start, int before, int count) {
    Log.i("Text watcher", suggestsThread.getStatus().toString());
    if(s.length() >= suggestions.getThreshold() && suggestsThread.getStatus() != AsyncTask.Status.RUNNING) {
  suggestsThread.cancel(true);
  suggestsThread = new WertAgentThread();
  suggestsThread.execute(s.toString());
}

}

更新自动完成任务,

public void updateSuggestions(String[] suggestions) {
if( suggestions != null) {  
  try {
    for(int ctr = 0; ctr < suggestions.length; ctr++) {
      this.logger.append(suggestions[ctr]);
    }
    suggestAdapter = new ArrayAdapter<String>(this, R.layout.suggestions, suggestions);
    this.suggestions.setAdapter(suggestAdapter);
  } catch(NullPointerException ex) {
    Log.e("Updating adapter", ex.toString());
  }
}

updateSuggestions 在 Asynctask 的 onPostExecute 回调中调用。提前感谢您的帮助,

罗兰。

4

1 回答 1

0

忘记我什至问过这个问题。我发现错误实际上在其他地方,我将 http 超时设置为毫秒而不是秒。常见错误:(。

对于任何试图实现相同目标的人来说,上述方法确实有效。

于 2012-05-21T13:31:56.170 回答