如何从 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、long
、long[]
或 void
。 Integer
不行。
@Update
将 return 查询更新的行数。此方法将 return 一个 int
或 void
。文件:https://www.sqlite.org/lang_update.html
插入
如果@Insert 方法只接收 1 个参数,它可以 return 一个 long,这是插入项的新 rowId。如果参数是数组或集合,则应 return long[] 或 List 代替。
更新
虽然通常不是必需的,但您可以使用此方法 return 一个 int 值来代替,指示数据库中更新的行数。
多次阅读后,我了解到这些方法是 returning 记录数而不是错误代码。无论如何,我关于如何读取或使用 OnConflictStrategy 值的问题仍未得到解答
我正在使用 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、long
、long[]
或 void
。 Integer
不行。
@Update
将 return 查询更新的行数。此方法将 return 一个 int
或 void
。文件:https://www.sqlite.org/lang_update.html
插入 如果@Insert 方法只接收 1 个参数,它可以 return 一个 long,这是插入项的新 rowId。如果参数是数组或集合,则应 return long[] 或 List 代替。
更新 虽然通常不是必需的,但您可以使用此方法 return 一个 int 值来代替,指示数据库中更新的行数。
多次阅读后,我了解到这些方法是 returning 记录数而不是错误代码。无论如何,我关于如何读取或使用 OnConflictStrategy 值的问题仍未得到解答