簡體   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