【问题标题】:Can Room bulk Insert return List<T> for inserted values with Conflict Strategy IGNORE?Room bulk Insert 是否可以为具有冲突策略 IGNORE 的插入值返回 List<T>?
【发布时间】:2019-07-09 11:52:50
【问题描述】:

Android Room bulk @Insert 可以返回插入数据RowIdList&lt;Long&gt;

如果我的@Entity 有一个 String 主键,是否有可能在使用冲突策略 IGNORE 时让批量插入语句返回一个包含插入的字符串值的 List&lt;String&gt;

当我尝试这段代码时

 @Insert(onConflict = OnConflictStrategy.IGNORE)
 fun insertIgnore(data: ArrayList<MyDO>): List<String>

我收到此构建错误消息:-

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

【问题讨论】:

  • 您在使用 livedata,还发布您的库版本

标签: android android-room


【解决方案1】:

不,它希望返回一个 long 数组(插入行的 rowid)而不是被插入的对象。

如果插入成功,值将是 1 或更大。

您可以通过索引将这些与传递的数组相关联,从而确定已插入或未插入的相应对象的值。

例如(java 而不是 Kotlin):-

使用

@Insert(onConflict = OnConflictStrategy.IGNORE)
long[] addDrinks(DrinkList... drinkLists);

你可以使用:-

    long[] result = mDrinkListDao.addDrinks(drinksToAdd);
    for (int i=0; i < result.length; i++) {
        if (result[i] > 0) {
            Log.d("INSERTRESULT",drinksToAdd[i].getList() + "was inserted.");
        } else {
            Log.d("INSERTRESULT", drinksToAdd[i].getList() + "was not inserted");
        }
    }

【讨论】:

  • 啊,谢谢,它有很大帮助。 ps:如果你使用 kotlin,你可以使用 LongArray 示例:@Insert suspend fun insertUserList(userList: List): LongArray
猜你喜欢
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-04
  • 2020-01-23
相关资源
最近更新 更多