2

これは、Android での私の最初のアプリケーションです。これが最善の方法であるかどうかを知りたいのですが、mysql db からのデータを使用してオートコンプリート テキストビューをロードしようとしています。このデータは、ユーザーが入力したテキストに基づいてデータベースから取得されます。

これが私がやっている方法です。

1.テキストウォッチ リスナーをオートコンプリート ビューに追加しました。afterTextchanged メソッドでは、PHP Web サービスを使用して db に接続し、mysql テーブルからデータを取得して配列にロードする非同期タスクを呼び出しています。そのタスクの実行後、アダプターを設定しています(アレイアダプター)。

私の質問は、文字が入力/変更されるたびに textchanged が呼び出された後、ここで db 呼び出しが発生するということです。では、すべてのデータベース コードをここに保持しておいてよろしいでしょうか。リストの読み込みにも時間がかかります。

それを行うための他の最良の方法はありますか?

ご返信ありがとうございます。

4

2 に答える 2

2

AsyncTask新しい文字が入力ボックスに追加されると、提案をフェッチする継続をキャンセルし、新しいパラメーターで新しい文字を開始します。また、ユーザーが希望する場合に待機することを選択できるように、提案が読み込まれていることをユーザーに示します。

これは、実行中の AsyncTask をキャンセルする理想的な方法を説明する投稿ですAsyncTask

アップデート:

Asynctask最初の文字入力のすべての結果をキャッシュすると (キャンセルは必要ありません)、ユーザーが編集ボックスにさらに文字を入力するにつれて、徐々に速度を上げることができます。キャラクター。以降のすべての結果 (新しい文字、つまり 2 番目、3 番目など) は、このリストのサブセットになります。を使用してリストを管理しますArrayAdapter。編集ボックスはAutoCompleteTextView である必要があります。

この方法では、最初の文字に対してのみ asynctask を実行する必要があります。

更新 2: でこのコードを試すことができますonCreate。より良いオプションのように聞こえます..

    AutoCompleteTextView act = 
                        (AutoCompleteTextView)findViewById(R.id.act_contact);
    ContentResolver content = getContentResolver();
    Cursor cursor = content.query(
                            ContactsContract.Contacts.CONTENT_URI, 
                            PEOPLE_PROJECTION, null, null, null);
    ContactListAdapter adapter = new ContactListAdapter(this, cursor);
    act.setAdapter(adapter);
于 2012-09-21T10:54:14.923 に答える
0

AndroidローカルDBを使用してサーバーからのデータを保存してから、ローカルDBを使用してArrayAdapterにデータを入力してみてください。これにより、パフォーマンスが確実に向上します。

それが役に立てば幸い ...

于 2012-09-21T11:07:04.170 に答える