0

runOnUiThread を AsyncTask に変換する必要があるいくつかのリンクを読みました: Android: RunOnUiThread vs AsyncTask

しかし、私はそれを成し遂げることができません。データベースからクエリを取得する AutoCompleteText を実装しています。

私の runOnUiThread と新しいスレッド (コンパイル):

new Thread(new Runnable() {
        public void run() {
            final DataBaseHelper dbHelper = new DataBaseHelper(ActivityName.this);
            dbHelper.openDataBase();
            item_list = dbHelper.getAllItemNames();

            ActivityName.this.runOnUiThread(new Runnable() {

                public void run() {
                    ArrayAdapter<String> sAdapter = new ArrayAdapter<String>(
                            ActivityName.this,
                            android.R.layout.simple_dropdown_item_1line,
                            item_list);
                    itemNameAct = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView_item_name);
                    itemNameAct.setAdapter(sAdapter);

                }
            });

        }
    }).start();

ワーカー スレッド部分を doInBackground に配置し、コードの runOnUiThread 部分を onPostExecute に配置しましたが、起動時にクラッシュします。

4

1 に答える 1

1

これは厄介です。私は質問をし、自分で答えています:/実際、私はAsyncTask(Object、Void、Cursor)を試していましたが、うまくいきませんでした。

動作しているクラスは次のとおりです。

class autoComplete extends AsyncTask<Void, Void, Void> {
    final DataBaseHelper dbHelper = new DataBaseHelper(ActivityName.this);

    @Override
    protected Void doInBackground(Void... params) {

        dbHelper.openDataBase();
        item_list = dbHelper.getAllItemNames();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        ArrayAdapter<String> sAdapter = new ArrayAdapter<String>(
                ClassName.this, android.R.layout.simple_dropdown_item_1line,
                item_list);
        itemNameAct= (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView_item_name);
        itemNameAct.setAdapter(sAdapter);
    }

}

次に、onCreateで次のように初期化します。

new autoComplete().execute();
于 2013-01-14T04:05:39.427 に答える