如何从 DAO 获取 OnConflictStrategy return 值

How to get OnConflictStrategy return value from DAO

我正在使用 Room Persistence Library。该操作按预期工作。但是我如何从调用方法返回 DAO 的 onConflict 值。我收到以下错误

error: Not sure how to handle the insert method's return type.

更新 将 return 类型从 Integer 更改为 long 后,出现此错误

Not sure how to handle update method's return type. Currently the supported return types are void, int or Int.

DAO.java

@Dao
public interface UserDao {

    @Insert(onConflict = OnConflictStrategy.ABORT)
    long insert(UserEntity userEntity);

    @Update(onConflict = OnConflictStrategy.IGNORE)
    long update(UserEntity userEntity);
}

MainActivity.java

@Override
protected Void doInBackground(UserEntity... userEntities) {
    long result = userDao.insert(userEntities[0]);
    if(result == OnConflictStrategy.ABORT){
        result = userDao.update(userEntities[0]);

    }
    return null;
}

如果 ConflictStrategy.ABORT 房间将抛出 SQLiteConstraintException。您可以抓住它以适合您的用例。

您遇到的编译错误是由于 @Insert 操作只能 return、longlong[]voidInteger 不行。

@Update 将 return 查询更新的行数。此方法将 return 一个 intvoid。文件:https://www.sqlite.org/lang_update.html

插入 如果@Insert 方法只接收 1 个参数,它可以 return 一个 long,这是插入项的新 rowId。如果参数是数组或集合,则应 return long[] 或 List 代替。

更新 虽然通常不是必需的,但您可以使用此方法 return 一个 int 值来代替,指示数据库中更新的行数。

多次阅读后,我了解到这些方法是 returning 记录数而不是错误代码。无论如何,我关于如何读取或使用 OnConflictStrategy 值的问题仍未得到解答