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