Webサービスからのjsonデータでオートコンプリートビューを更新するアプリを開発しようとしています。
textwatcherを使用して、ontextchangedコールバックをチェックインし、結果を取得するためにWebサービスを非ブロッキング呼び出しするasynctaskオブジェクトを作成します。テキストが入力されると、実行中の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());
}
}
updateSuggestionsは、AsynctaskのonPostExecuteコールバックで呼び出されます。事前にあなたの助けに感謝し、
ローランド。