簡體   English   中英

Android Java,如何從RoomDatabase獲取數據到MainActivity

[英]Android Java, how to get data from RoomDatabase into MainActivity

提前為任何錯誤道歉,我是新手。 我正在嘗試使用 RoomDatabase,並且正在嘗試訪問 MainActivity 中的數據。 我將數據插入到我的表中,我有一個看起來像這樣的條目

錫德:1

姓名:我的姓名

描述:myDesc

我有三個主要文件:

  1. TaskDao.java
  2. TaskViewModel.java
  3. MainActivity.java

在 TaskDao.java 中,我有這個查詢(對於這個例子進行了簡化):

@Query("SELECT 1 FROM task_table LIMIT 1")
int returnSid();

在 TaskViewModel.java 中,我對此進行了擴展:

public int returnSid()
{
    final int[] myInt = new int[1];
    TaskRoomDatabase.databaseWriteExecutor.execute(() ->
    {
        myInt[0] = taskDao.returnSid();
        Log.i("myLog", "myInt[0] showing as: " +myInt[0]);
    });

    return myInt[0];
}

在 MainActivity.java 中,我有以下代碼:

 int sid = mTaskViewModel.returnSid();
 Log.i("myLog", "In MainActivity, sid is: " +sid);

日志顯示為:

myInt[0] showing as: 1
In MainActivity, sid is: 0

我認為這是因為我在單獨的線程上從數據庫中獲取數據,並且線程不同步。 知道如何解決這個問題嗎? 在 MainThread 上獲取數據的最佳做法是什么? 感謝您的寶貴時間,對於給您帶來的不便,我們深表歉意。

因此, Runnable的解決方案對我有用。 我不確定這是否是最優雅的解決方案,所以如果有人可以展示最佳實踐,我將不勝感激。

任務.java

@PrimaryKey(autoGenerate = true)
@NonNull
@ColumnInfo(name = "sid")
public int sid;

TaskDao.java

@Query("SELECT sid FROM task_table WHERE name = :taskName")
int returnSid(String taskName);

TaskViewModel.java

public int returnSid(String taskName)
{
    int sid = taskDao.returnSid(taskName);
    return sid;
}

MainActivity.java

Runnable myRunnable = () ->
{
    try 
    {
        int sid = mTaskViewModel.returnSid(taskName);
        // Do rest of the work with sid here
    } 
    catch (Exception e) 
    {
        // Log exception
    }
};

Thread thread = new Thread(myRunnable);
thread.start();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM