#kotlin #android-room #dao
#kotlin #android-room #dao
Вопрос:
У меня есть пример кода (ниже)
@Entity(tableName = Order.TABLE_NAME)
@JsonClass(generateAdapter = true)
@TypeConverters(QueryTypeConverter::class)
data class Order(
@PrimaryKey(autoGenerate = true)
val id: Long,
val isSendCheque: Int,
val phone: String,
val name: String,
val comment: String? = "",
val timeFrom: String,
val timeTo: String,
var basketHistory: MutableLiveData<MutableList<Product>>,
val publicOrderId: String
) {
companion object {
const val TABLE_NAME = "mau_order"
}
}
class QueryTypeConverter {
@TypeConverter
fun BasketHistoryToString(basketHistory: MutableLiveData<MutableList<Product>>?): String? {
if (basketHistory != null) {
return Gson().toJson(basketHistory.value?.toList(), object : TypeToken<List<Product>>() {}.type)
}
return null
}
@TypeConverter
fun stringToBasketHistory(data: String?): MutableLiveData<MutableList<Product>>? {
if (data != null) {
return MutableLiveData<MutableList<Product>>(
Gson().fromJson(data, object : TypeToken<List<Product>>() {}.type))
}
return null
}
}
И у меня есть эта ошибка
ошибка: параметры метода запроса должны быть либо типом, который можно преобразовать в столбец базы данных, либо списком / массивом, который содержит такой тип. Вы можете рассмотреть возможность добавления адаптера типа для этого. java.util.List<com.vepe.navigation.model.Продукт> Список продуктов, @org.jetbrains.annotations.NotNull
Я не понимаю, что ему не нравится. На всякий случай я также покажу классы Dao и Product
@Dao
interface OrdersDao {
/**
* Inserts [orders] into the [Order.TABLE_NAME] table.
* Duplicate values are replaced in the table.
* @param orders Orders
*/
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertOrders(orders: List<Order>)
/* @Query("UPDATE Tour SET endAddress = :end_address WHERE id = :tid")
fun updateTour(tid: Long, end_address: String?): Int*/
@Query("UPDATE ${Order.TABLE_NAME} SET basketHistory = :productList WHERE id = :tid")
suspend fun updateOrder(tid: Long, productList: List<Product>)
/**
* Deletes all the orders from the [Order.TABLE_NAME] table.
*/
@Query("DELETE FROM ${Order.TABLE_NAME}")
suspend fun deleteAllOrders()
/**
* Fetches the order from the [Order.TABLE_NAME] table whose id is [orderId].
* @param orderId Unique ID of [Order]
* @return [Flow] of [Order] from database table.
*/
@Query("SELECT * FROM ${Order.TABLE_NAME} WHERE ID = :orderId")
fun getOrderById(orderId: Long): Flow<Order>
@Query("SELECT name FROM ${Order.TABLE_NAME} WHERE ID = :orderId")
fun getBasketHistoryFromOrderById(orderId: Long): Flow<String>
//fun getBasketHistoryFromOrderById(orderId: Long): Flow<List<Product>?>
/**
* Fetches all the orders from the [Order.TABLE_NAME] table.
* @return [Flow]
*/
@Query("SELECT * FROM ${Order.TABLE_NAME}")
fun getAllOrders(): Flow<List<Order>>
}
И продукт
@Parcelize
@Entity
@JsonClass(generateAdapter = true)
data class Product(
@SerializedName("id")
@ColumnInfo(name = "id")
var id: Long = -1,
@SerializedName("order_id")
@ColumnInfo(name = "order_id")
var orderId: Long = -1,
@SerializedName("name")
@ColumnInfo(name = "name")
var name: String = "name product",
@SerializedName("packaging")
@ColumnInfo(name = "packaging")
var packaging: String? = "1 кг",
@SerializedName("path_image")
@ColumnInfo(name = "path_image")
var pathImage: String = "",
@SerializedName("price")
@ColumnInfo(name = "price")
var price: Double = 0.0,
@SerializedName("price_discount")
@ColumnInfo(name = "price_discount")
var priceDiscount: Double = 0.0,
@SerializedName("product_id")
@ColumnInfo(name = "product_id")
var productId: Int = -1,
@SerializedName("quantity")
@ColumnInfo(name = "quantity")
var quantity: Double = 0.0,
@SerializedName("units")
@ColumnInfo(name = "units")
var units: String = "ШТ",
@SerializedName("created_at")
@ColumnInfo(name = "created_at")
var createdAt: String = "",
@SerializedName("updated_at")
@ColumnInfo(name = "updated_at")
var updatedAt: String = "",
@SerializedName("brgew")
@ColumnInfo(name = "brgew")
var brgew: String = "",
@SerializedName("gewei")
@ColumnInfo(name = "gewei")
var gewei: String = "кг"
) : Parcelable
Я буду благодарен за ваши комментарии и код на kotlin
Спасибо