我正在尝试开发一个应用程序,该应用程序使用来自Web服务的json数据更新自动完成视图。
使用textwatcher,我检查ontextchanged回调并创建一个asynctask对象,该对象对webservice进行非阻塞调用以获得结果。输入文本时,任何正在运行的asynctask对象都会被取消并生成一个新对象(因为asynctask是一种单例,我不能重新运行它)。
然后通过清除ArrayAdapter并添加每个新项目,将结果添加到自动完成视图。
问题在于,几乎从不从服务器检索数据,无论是由于常数取消还是其他原因。
这样做是否有正确的解决方案,或者是否有人成功完成了这项任务?
以下是相关的代码段。 TextWatcher,
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());
}
}
在Asynctask中的onPostExecute回调中调用updateSuggestions。 提前感谢您的帮助,
罗兰。
答案 0 :(得分:0)
忘记我甚至问过这个问题。我发现错误实际上是在其他地方,我将http时间设置为毫秒而不是秒。常见错误:(。
对于任何想要实现相同目标的人来说,上述方法确实有效。