0

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コールバックで呼び出されます。事前にあなたの助けに感謝し、

ローランド。

4

1 に答える 1

0

私もこの質問をしたことを忘れてください。エラーが実際には別の場所にあることを発見しました。httpタイムアウトを秒ではなくミリ秒に設定していました。よくある間違い:(。

同じことを達成しようとしている人にとっては、上記の方法が実際に機能します。

于 2012-05-21T13:31:56.170 に答える