gpt4 book ai didi

如果退出,Android Room 会部分更新

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:51:33 25 4
gpt4 key购买 nike

我遇到了一个我不太确定如何解决的问题。我目前正在从事的项目有一个模型,该模型部分由后端存储的数据和来自本地数据库的数据组成。所以我要存档的是这样的:

文章:[Bunch of Information] & [boolean Subscribed]

订阅字段是设备绑定(bind)的,不应反射(reflect)后端的任何数据。我的问题是是否可以在 Room 中实现某种处理以下情况的 createIfNotExit() 方法:

  • 本地不存在的文章:存储副本并设置为已订阅假的
  • 出现文章:更新所有信息并保留订阅标志不变

我的想法是将模型拆分为一个单独的订阅模型,其中包含对文章的引用。这样我就可以通过 @Update(OnConfict=Update) 等简单地实现它...

有没有办法在 DAO 中实现一个简单的 @Query 方法来执行我想要的?

抱歉,如果这是一个非常基本的问题,但我找不到任何关于处理这种情况的最佳实践的 Material 。

提前致谢!

最佳答案

例如,您的实体是:

@Entity(tableName = "articles")
public final class Article {
@PrimaryKey
public long serverId;
public String title;
public String url;

public boolean isSubscribed;
}

您可以在 DAO 中编写此方法:

@Query("INSERT OR REPLACE INTO articles (serverId, title, url, isSubscribed) VALUES (:id, :title, :url,
COALESCE((SELECT isSubscribed FROM articles WHERE id = :id), 0));")
void insertOrUpdateArticle(long id, String title, String url);

另一种选择 - 将此逻辑写入您的存储库并使用两个简单的操作:选择和更新

关于如果退出,Android Room 会部分更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45099040/

25 4 0
文章推荐: c# - SetColorFilter 在 Xamarin.Android 中不起作用
文章推荐: javascript - 如何使用javascript验证文本区域
文章推荐: javascript - Backbone.js: Uncaught TypeError: Object # 没有方法 'get'