Преобразование runOnUiThread в AsyncTask
Я прочитал в некоторых ссылках, что мне нужно конвертировать мой runOnUiThread в AsyncTask: Android: RunOnUiThread против 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, но он вылетает при запуске.
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();