2017-05-23 67 views
6

çalışmıyor, ama bir şekilde o LOKALİZE UNICODE veya sonuçları sipariş etmek mümkün değildir lokalize . Çalıştığım tek şey, benim durumumda işe yaramayan NOCASE.Oda sürekliliği Kütüphane Sorgu HARMANLA bu yıl Google I/O da açıklanacak yeni <a href="https://developer.android.com/topic/libraries/architecture/room.html" rel="noreferrer">Room Persistance Library</a> kullanıyorum ve şimdiye kadar harika çalışıyor

Bu işleve ulaşmak için herhangi bir yol var mı?

@Dao 
public interface ContactDao { 

    @Query("SELECT * FROM contact ORDER BY lastName COLLATE LOCALIZED") 
    Flowable<List<Contact>> getAll(); 
} 

i bir hata alıyorum yukarıdaki gibi Sorgu kurarsan: sütununda aşağıdaki yolu takip ederek tanımlamak sırasında

Error:(21, 29) error: There is a problem with the query: [SQLITE_ERROR] 
SQL error or missing database (no such collation sequence: LOCALIZED) 
+0

Eğer doğru anlamak, 'HARMANLA LOCALIZED' kullanmak için, bir parçası olarak beyan gerekir: endeksler ile de varlık sınıfı tanımı kopyalamanız gerekir deyimi oluşturmak -

(KOTLIN olarak) benim uygulaması yoktur CREATE TABLE ifadesinde bir sütun kısıtlaması. Kendi "CREATE TABLE" ifadenizi kodlamak için bir 'Migration 'kullanabileceğinizi, ancak ilk tablo oluşturma (bir yükseltme) için bir“ Migration ”ın nasıl oluşturulduğuna dair bir belirsiz görünmektesiniz. [Bu sayı] 'yı (https://issuetracker.google.com/issues/62007004) alan bir kişi olsaydınız, bilmiyorum. – CommonsWare

+0

Merhaba, tamir ettin mi? –

+0

Gerçekten değil ... Şu an listeyi kullanmadan önce listeyi sıralıyorum. 'Collections.sort (nameOfYourList) {o1, o2 -> Collator.getInstance (Locale.GERMAN) .compare (o1.lastName, o2.lastName)} – denwehrle

cevap

1

yılında harmanlamak yoktur. Sabit olarak işaretlenmiş olan https://issuetracker.google.com/issues/68925249 numaralı bu sorun raporunu buldum, ancak muhtemelen yayınlanmadı.

CommonsWare söz konusu olduğunda yorumladığı gibi çirkin bir çözüm var - CREATE deyiminde tanımlayın. Bu, veritabanı oluşturucusunda geri arama ile uygulanabilir. Ama sorun var - sqlite, harman değiştirmeyi desteklemediğinden, tablo oluşturmamız gerekiyor. Tablo henüz geri aramada bulunduğundan, bu tabloyu silmemiz gerekir.

@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 
     } 
    } 
}