![](/img/trans.png)
[英]How to get the Data from DialogFragment to MainActivity in Android?
[英]Android Java, how to get data from RoomDatabase into MainActivity
提前為任何錯誤道歉,我是新手。 我正在嘗試使用 RoomDatabase,並且正在嘗試訪問 MainActivity 中的數據。 我將數據插入到我的表中,我有一個看起來像這樣的條目
錫德:1
姓名:我的姓名
描述:myDesc
我有三個主要文件:
在 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.