Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 暂停函数dosn';不要在foreach内恢复_Android_Kotlin_Android Room_Coroutine - Fatal编程技术网

Android 暂停函数dosn';不要在foreach内恢复

Android 暂停函数dosn';不要在foreach内恢复,android,kotlin,android-room,coroutine,Android,Kotlin,Android Room,Coroutine,我正在Android项目中使用Room持久性库。 ViewModel类: class ShoppingListsViewModel( private val toBuyProductRepository: ToBuyProductRepository, private val shoppingListRepository: ShoppingListRepository, private val productRepository: ProductRepository )

我正在Android项目中使用Room持久性库。 ViewModel类:

class ShoppingListsViewModel(
    private val toBuyProductRepository: ToBuyProductRepository,
    private val shoppingListRepository: ShoppingListRepository,
    private val productRepository: ProductRepository
) : ViewModel() {

fun addShoppingListWithProductsToBuy(listName: String) {
        viewModelScope.launch {
            val listId: Long = shoppingListRepository.insertList(ShoppingList(listName))
            val productsToBuy: List<ToBuyProduct> = toBuyProductRepository.getAllProductsNLD()

            productsToBuy.forEach {
                productRepository.insert(
                    Product(
                        ProductDetails(productName = it.name),
                        listId
                    )
                )
            }
        }
    }
}
DAOs:


该问题涉及函数
添加ShoppingListWithProductsToBuy
toBuyProductRepository.getAllProductsNLD()
始终返回有效列表。但是,
productsToBuy.forEach
中的迭代次数是随机的,并不取决于
productsToBuy
的大小。协同程序似乎在
productRepository上挂起。请在某个时间插入
,并且永远不会恢复。

val l=productsToBuy.map{Product(ProductDetails(productName=it.name),listId)}
替换当前的
insert
或向
ProductRepository
ProductDao
添加新功能,它们接收
列表
,并一次插入整个列表,而不是插入每个项目
class ShoppingListRepository(
    private val shoppingListDao: ShoppingListDao
) {

    suspend fun insertList(list: ShoppingList): Long = shoppingListDao.insertList(list)
}
class ToBuyProductRepository(
    private val toBuyProductDao: ToBuyProductDao
) {

    suspend fun getAllProductsNLD(): List<ToBuyProduct> = toBuyProductDao.getAllProductsNLD()
}
class ProductRepository(
    private val productDao: ProductDao
) {
    suspend fun insert(product: Product) = productDao.insert(product)
}
@Dao
interface ShoppingListDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insertList(list: ShoppingList): Long
}
@Dao
interface ToBuyProductDao {

    @Query("SELECT * FROM tobuyrecord")
    suspend fun getAllProductsNLD(): List<ToBuyProduct>
}
@Dao
interface ProductDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insert(product: Product)
}