ではありません。この問題の報告書https://issuetracker.google.com/issues/68925249は修正済みとマークされていますが、おそらくリリースされていません。
したがって、CommonsWareが問題にコメントしたように醜い回避策があります - それをCREATE文で定義します。これはデータベースビルダーのコールバックで実装できます。しかし、問題があります - sqliteがalter collateをサポートしていないため、create tableを使用する必要があります。また、コールバックにテーブルが存在するため、このテーブルを削除する必要があります。
@Database(entities = [(LocalityItem::class)], version = AppDatabase.DB_VERSION, exportSchema = false)
abstract class AppDatabase : RoomDatabase() {
abstract fun localityDao(): LocalityDao
companion object {
const val DB_NAME : String = "app_db"
const val DB_VERSION : Int = 1
private var INSTANCE: AppDatabase? = null
private val CALLBACK: Callback = object : Callback() {
override fun onCreate(db: SupportSQLiteDatabase) {
db.execSQL("DROP TABLE `locality` ")
db.execSQL("CREATE TABLE `locality` ("
+ " `id` INTEGER,"
+ " `type` INTEGER,"
+ " `name` TEXT COLLATE LOCALIZED, "
+ " `row_index` INTEGER,"
+ " `col_index` INTEGER,"
+ " PRIMARY KEY(`id`)"
+ ")")
db.execSQL("CREATE INDEX `index_locality_type` ON `locality` (`type`)")
db.execSQL("CREATE INDEX `index_locality_name` ON `locality` (`name`)")
}
}
fun getInstance(context : Context) : AppDatabase? {
if (INSTANCE == null) {
synchronized(AppDatabase::class) {
INSTANCE = Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java, DB_NAME)
.addCallback(CALLBACK)
.build()
}
}
return INSTANCE
}
}
}
は私が正しく理解していれば、 'COLLATE LOCALIZED'を使用するように、あなたがの一部としてそれを宣言する必要があります:インデックスでも、エンティティクラスの定義をコピーする必要がありますステートメントを作成 -
は(Kotlinで)私の実装があります'CREATE TABLE'文の列制約です。最初のテーブルの作成(アップグレード)に対して 'Migration'を作成する方法は私には不明ですが、あなたは自分の' CREATE TABLE'ステートメントをコード化するために 'Migration'を使うことができます。あなたが[この問題](https://issuetracker.google.com/issues/62007004)を提出した人かどうかはわかりませんが、私はそれに気をつけています。 – CommonsWare
こんにちは、修正しましたか? –
本当は...私は使用する前にリストを並べ替える瞬間です。 'Collections.sort(nameOfYourList){o1、o2 - > Collator.getInstance(Locale.GERMAN).compare(o1.lastName、o2.lastName)}' – denwehrle