繁体   English   中英

Android 使用数据库值更新应用程序视图

[英]Android App update view with value from database

因此,我目前正处于使用 Android Studio 在 Java 中编写 Android 应用程序的早期阶段。 我有 MainActivity,它由一个 TextView 和一个按钮组成。

这个想法是,当我按下按钮时,从房间数据库中获取一个实体对象,从 object 中提取一个字符串成员,然后用于为 TextView 设置新文本。 我最好通过按下按钮从数据库中获取新的 object 并更新 TextView 来执行此操作,而无需启动新的活动。

按钮的 onClick 方法在其第一个版本中看起来像这样:

private void getFoo() {
    Foo foo = db.fooDao().getRandom();
    String fooName = foo.getFooName();
    textFoo.setText(fooName);
}

第一个问题是我尝试在主线程中按原样从数据库中获取 object,编译器对此并不满意。 试图将数据库交互包装到一个单独的线程中,但是我要么必须弄清楚如何使线程内部获取的值在线程外部可用,要么我必须在我的 Thread run() 方法中嵌套对 runOnUiThread 的调用.

我的结果好坏参半,通过一种配置,您可以看到新文本显示在屏幕上,然后一秒钟后应用程序崩溃了。

我可以在同一个活动中更新我的视图,还是应该开始一个新的?

好的,我忽略了一个完全解决我的问题的不同的 SO问题。 我的 getFoo 代码现在基本上看起来像这样并满足预期的 function:

private void getFoo() {
    class LoadFooTask extends AsyncTask<Void, Void, Foo> {
        @Override
        protected Foo doInBackground(Void... voids) {
            return db.fooDao().getRandom();
        }

        @Override
        protected void onPostExecute(Foo foo) {
            String FooName = foo.getFooName();
            textFoo.setText(fooName);
        }
    }
    LoadDishTask loadDishTask = new LoadDishTask();
    loadDishTask.execute();
}

从数据库加载的异步任务在 doInBackground() 方法内部完成,UI 更新通过 onPostExecute() 方法在主线程上完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM