【问题标题】:Converting runOnUiThread to AsyncTask将 runOnUiThread 转换为 AsyncTask
【发布时间】:2013-01-12 07:16:20
【问题描述】:

我阅读了一些需要将我的 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 中,但它在启动时崩溃。

【问题讨论】:

  • 哦!解决了!我正在扩展 AsyncTask 然后尝试使用 new ClassName().execute(Object[]); 进行初始化我将其更改为 AsyncTask 然后 new ClassName().execute() 及其工作。
  • 稍后当我被允许访问自我答案时,我将发布课程。

标签: android multithreading android-asynctask autocompletetextview


【解决方案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();

【讨论】:

    猜你喜欢
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多