Преобразование runOnUiThread в AsyncTask

Я прочитал в некоторых ссылках, что мне нужно преобразовать мой 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, но при запуске происходит сбой.


person Rohit_D    schedule 12.01.2013    source источник
comment
Ох! это решилось! Я расширял AsyncTask‹Object,Void,Cursor›, а затем пытался инициализировать с помощью new ClassName().execute(Object[]); Я изменил его на AsyncTask‹Void,Void,Void›, а затем на new ClassName().execute() и его работу.   -  person Rohit_D    schedule 12.01.2013
comment
Я опубликую класс позже, когда мне будет разрешен доступ к самостоятельному ответу.   -  person Rohit_D    schedule 12.01.2013


Ответы (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();
person Rohit_D    schedule 14.01.2013