我在一些链接中读到我需要将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中,但它在启动时崩溃。
答案 0 :(得分: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();