gpt4 book ai didi

java - Android : How to OnConflictStrategy. 替换但保留一个特定字段

转载 作者:行者123 更新时间:2023-11-30 10:19:41 24 4
gpt4 key购买 nike

我在 Android Room 中有一个 DAO,插入了 OnConflictStrategy.REPLACE,有一个 boolean 字段 downloaded,如果用户下载了这个对象,它就会变为 true,我想替换整个对象 onConflict,但在数据库中保留此字段的状态 (downloaded)。

public interface DAOTemplate<T> {
@Insert(onConflict = OnConflictStrategy.REPLACE)
@NonNull
void insert(T... messages);

@Delete
void delete(T message);

@Update
void update(T message);
}

最佳答案

答案有点晚了,但我只是在我的代码中做了同样的事情。您的方法不应该是替换对象,而是使用您需要更新的字段更新现有对象,并只保留下载的内容。

为此使用OnConflictStrategy.FAIL。用 try/catch block 包围您的 insert(),然后在 catch 中放置您的 update() 调用。我正在使用 RXJava + Kotlin 来执行此操作,但您可以使用任何其他异步方法来实现此逻辑。

fun saveItem(item: Item): Single<Unit>? =
Single.fromCallable {
try {
dao.save(item)
} catch (exception: SQLiteConstraintException) {
dao.updateModel(item.id)
} catch (throwable: Throwable) {
dao.updateModel(item.id)
}
}.subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread())

在 DAO 中,我按如下方式实现 update:

@Query("UPDATE name_of_your_table SET quantity = quantity + 1 WHERE id = :id")
fun updateModel(id: String)

这里我增加了数量,但您可以将要更新的字段作为参数传递,并使用 SET 设置您需要更新的所有字段。

关于java - Android : How to OnConflictStrategy. 替换但保留一个特定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48517722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com