Android studio 改装“插入到文件室存储库”,但仅插入一行

Android studio 改装“插入到文件室存储库”,但仅插入一行,android-studio,mvvm,retrofit,android-room,Android Studio,Mvvm,Retrofit,Android Room,我认为是正确的,但总是插入一行,我不知道为什么?我是用户MVVM、依赖注入(Kodein)和协同程序 (接口) MyApi.kt ProvinsiRepo.kt class ProvinsiRepo( private val api: MyApi, private val db: AppDatabase ) : SafeApiRequest(){ suspend fun getAllProvinsiAPI(): List<Provinsi> { return

我认为是正确的,但总是插入一行,我不知道为什么?我是用户MVVM、依赖注入(Kodein)和协同程序

(接口) MyApi.kt

ProvinsiRepo.kt

class ProvinsiRepo(
    private val api: MyApi,
    private val db: AppDatabase
) : SafeApiRequest(){
suspend fun getAllProvinsiAPI(): List<Provinsi> {
    return apiRequest{
        api.getProvinsi()
    }
}

suspend fun saveallParam(param: List<Provinsi>) = db.getProvinsiDao().upsert(param)
}

@Dao
接口AllParamDAO{
@插入(onConflict=OnConflictStrategy.REPLACE)
suspend fun upsert(参数:列表)
}

如果API请求返回的列表在Provinci对象中始终具有相同的id,则可能会发生这种情况。如果相同,那么它将替换数据库中的数据,因为id是主键,并且它将保持唯一约束

要解决此问题,您可以尝试:

@Entity
data class Provinsi(
    val createdBy: String?,
    val createdDate: Long?,
    @PrimaryKey(autoGenerate = true) val id: Int = 0, // use this line
    val provinceCode: String?,
    val provinceName: String?,
    val updatedBy: String?,
    val updatedDate: Long?
)

对不起,我错了。kt@GET(“列表省”)挂起GetProvensi():响应
class ProvinsiRepo(
    private val api: MyApi,
    private val db: AppDatabase
) : SafeApiRequest(){
suspend fun getAllProvinsiAPI(): List<Provinsi> {
    return apiRequest{
        api.getProvinsi()
    }
}

suspend fun saveallParam(param: List<Provinsi>) = db.getProvinsiDao().upsert(param)
}
class ProvinsiViewModel(
    private val provinsirepo: ProvinsiRepo,  
) : ViewModel() {

   provinsirepo.getAllProvinsiAPI().let { provinsi->
          provinsirepo.saveallParam(provinsi)
   }
@Dao
interface AllParamDAO {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun upsert(parameter: List<AllParam>)

}
@Entity
data class Provinsi(
    val createdBy: String?,
    val createdDate: Long?,
    @PrimaryKey(autoGenerate = true) val id: Int = 0, // use this line
    val provinceCode: String?,
    val provinceName: String?,
    val updatedBy: String?,
    val updatedDate: Long?
)