ошибка: параметры метода запроса должны быть либо типом, который можно преобразовать в столбец базы данных, либо списком / массивом, который содержит такой тип - PullRequest
0 голосов
/ 07 октября 2018

My Type Converter

import androidx.room.TypeConverter
import com.amin.movie.vo.Query

object QueryTypeConverter {
    @TypeConverter
    @JvmStatic
    fun queryToString(query: Query?): String? = if (query != null) Query.toJson(query) else null

    @TypeConverter
    @JvmStatic
    fun stringToQuery(data: String?): Query? = if (data != null) stringToQuery(data) else null
}

и Entity -

import androidx.room.Entity
import androidx.room.PrimaryKey
import androidx.room.TypeConverters
import com.amin.movie.db.MovieTypeConverters
import com.amin.movie.db.QueryTypeConverter
import com.google.gson.annotations.SerializedName

@Entity
@TypeConverters(QueryTypeConverter::class)
data class MovieSearchResult(
        // and other fields
        @PrimaryKey
        val query: Query
)

, эта ошибка возникает, когда я хочу сделать ошибку в моем проекте: параметры метода запроса должны быть типом, который можно преобразоватьв столбец базы данных или список / массив, который содержит такой тип.Вы можете рассмотреть возможность добавления адаптера типа для этого.

1 Ответ

0 голосов
/ 04 июня 2019

Я протестировал ваш код на последней версии Room на данный момент , и он работает для меня.Я создал базу данных и Dao , чтобы убедиться, что она работает, и все выглядит нормально.
Даже если ваш метод работает, это не тот, который они показывают впримеры kotlin в документации для kotlin . Здесь - их пример на TypeConverter , и это то, как это будет применяться к вашему конкретному случаю (я также предоставил База данных и Дао Я сделал):

// The query class wasn't provided so this is just a simple
// class with a toJson static method
data class Query(var query: String) {
    companion object {
        fun toJson(query: Query): String {
            return query.query
        }
    }
}

@Entity
@TypeConverters(QueryTypeConverter::class)
data class MovieSearchResult(
    // and other fields
    @PrimaryKey
    val query: Query
)

class QueryTypeConverter {
    @TypeConverter
    fun queryToString(query: Query?): String? = if (query != null) Query.toJson(query) else null

    @TypeConverter
    fun stringToQuery(data: String?): Query? = if (data != null) stringToQuery(data) else null
}

@Dao
interface MovieSearchResultDao {
    @Insert
    fun insert(r: MovieSearchResult)

    @Update
    fun update(r: MovieSearchResult)

    @Delete
    fun delete(r: MovieSearchResult)
}

@Database(entities=arrayOf(MovieSearchResult::class), version = 1, exportSchema = false)
abstract class AppDatabase : RoomDatabase() {
    abstract fun dao(): MovieSearchResultDao
    companion object {
        private var DB: AppDatabase? = null;
        public fun instance(context: Context): AppDatabase {
            var db = DB
            if (db == null) {
                db = Room.databaseBuilder(
                    context,
                    AppDatabase::class.java, "database-name"
                ).build()
                DB = db
            }
            return db
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...