【发布时间】:2020-12-18 06:54:06
【问题描述】:
正如这里Android Room - Get the id of new inserted row with auto-generate 所讨论的,可以从新插入的对象中获取 ID。
但是如何以 MVVM 模式从 DAO 到我的 Activity 类获取这个 ID?
那里的一些answers 建议使用rxjava 和类似的东西:return Single.fromCallable<Long> { recipesDao.insertManual(cookingRecipes) }
但是为了一个方法调用而实现两个完整的 Gradle 依赖是否有意义?
难道没有办法让我目前的结构能够做到这一点吗?
Activity - ViewModel - Repository (-AsyncTask) - Dao
唯一的问题是从插入语句中获取返回值,该语句是从AsyncTask 调用的:
private static class UpdateChallengeInfosAsyncTask extends AsyncTask<ChallengeInfos, Void, Void> {
private ChallengeInfosDao mAsyncTaskDao;
UpdateChallengeInfosAsyncTask(ChallengeInfosDao dao) {
mAsyncTaskDao = dao;
}
@Override
protected Void doInBackground(ChallengeInfos... challengeInfos) {
mAsyncTaskDao.insert(challengeInfos[0]);
return null;
}
}
也许可以像这里一样使用onPostExecute() + Interface 组合?
How to get the result of OnPostExecute() to main activity because AsyncTask is a separate class?
【问题讨论】:
-
AsyncTask 已弃用。在 Java 中使用并发或在 Kotlin 中使用协程。您可以从 AsyncTask 返回数据。 stackoverflow.com/questions/6053602/…
标签: android mvvm android-asynctask android-room sql-insert