[英]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.