2017-06-02 67 views
52
Ben Android Veritabanı kullanıyorum

Bileşen OdasıOdası - biz şemayı dışa böylece Şema ihracat rehberi açıklama işlemciye sağlanmaz

Her şeyi yapılandırılmış, ama ben derleme yaparken, Android Studio beni

uyarı verir

Şema dışa aktarma dizini ek açıklama işlemcisine sağlanmaz, bu nedenle şemayı veremeyiz. room.schemaLocation ek açıklama işlemci argümanını sağlayabilir veya exportSchema öğesini false olarak ayarlayabilirsiniz.

Ben DB dosya benim app nasıl etkileyebilir

yer alacaktır yeri anlamak gibi? Burada en iyi uygulama nedir? varsayılan konum kullanmalıyım (false değeri)?

cevap

57

docs

Bir klasöre şema ihracat Odası anlatmak için ek açıklama işlemci argüman (room.schemaLocation) ayarlayabilirsiniz söylerler. Zorunlu olmamasına rağmen, kod geçmişinizde sürüm geçmişine sahip olmak iyi bir uygulamadır ve bu dosyayı sürüm kontrol sisteminize eklemelisiniz (ancak uygulamanızla birlikte göndermeyin!).

Yani şema kontrol etmek gerekmez ve aşağıdaki gibi, sadece senin RoomDatabase için exportedSchema = false ekleyin uyarı kurtulmak istiyorum. Aşağıda @mikejonesguy answer izlerseniz

@Database(entities = { YourEntity.class }, version = 1, exportSchema = false) 
public abstract class AppDatabase extends RoomDatabase { 

    ... 

} 

, dokümanların :) belirtilen iyi uygulamaların takip edecektir. Temel olarak, ../app/schemas/ klasörünüzde bir .json dosyasını alırsınız. Ve şuna benzer: Benim anlayış doğru olup

{ 
    "formatVersion": 1, 
    "database": { 
    "version": 1, 
    "identityHash": "53db508c5248423325bd5393a1c88c03", 
    "entities": [ 
     { 
     "tableName": "sms_table", 
     "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `message` TEXT, `date` INTEGER, `client_id` INTEGER)", 
     "fields": [ 
      { 
      "fieldPath": "id", 
      "columnName": "id", 
      "affinity": "INTEGER" 
      }, 
      { 
      "fieldPath": "message", 
      "columnName": "message", 
      "affinity": "TEXT" 
      }, 
      { 
      "fieldPath": "date", 
      "columnName": "date", 
      "affinity": "INTEGER" 
      }, 
      { 
      "fieldPath": "clientId", 
      "columnName": "client_id", 
      "affinity": "INTEGER" 
      } 
     ], 
     "primaryKey": { 
      "columnNames": [ 
      "id" 
      ], 
      "autoGenerate": true 
     }, 
     "indices": [], 
     "foreignKeys": [] 
     } 
    ], 
    "setupQueries": [ 
     "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", 
     "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"53db508c5248423325bd5393a1c88c03\")" 
    ] 
    } 
} 

varsa kolayca db tarihini takip edebilir, böylece, sen her veritabanı sürümü güncelleme ile böyle bir dosya alacak.

+0

kullanırken Kotlin için de çalışıyor. Teşekkür ederim, Benim için çalışıyor. –

+0

Aynı hataya rastladım, ancak varlığımın bir kurucunun eklenmesiydi.Hatalar ve yeni bir boş yapıcıyı ekleyen herhangi bir kurucuya '@Ignore' ekleyin. – Codeversed

+0

Gerçekten "Uygulamanızla birlikte gönderilmiyor" ifadesinin anlamı nedir? APK’da yer alacak mı? –

86

Uygulama modülünüzün build.gradle dosyasında, bunu defaultConfig bölümüne (android bölümünün altında) ekleyin. Bu, şemanızı proje klasörünüzün schemas alt klasörüne yazar. Bunun gibi

javaCompileOptions { 
    annotationProcessorOptions { 
     arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] 
    } 
} 

:

// ... 

android { 

    // ... (compileSdkVersion, buildToolsVersion, etc) 

    defaultConfig { 

     // ... (applicationId, miSdkVersion, etc) 

     javaCompileOptions { 
      annotationProcessorOptions { 
       arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] 
      } 
     } 
    } 

    // ... (buildTypes, compileOptions, etc) 

} 

// ... 
+7

kimse, bu kesin yaklaşım merak edilirse Ayrıca * kapt * – DanielDiSu

10

Kotlin? İşte başlıyoruz:

android { 

    // ... (compileSdkVersion, buildToolsVersion, etc) 

    defaultConfig { 

    // ... (applicationId, miSdkVersion, etc) 

     kapt { 
      arguments { 
       arg("room.schemaLocation", "$projectDir/schemas".toString()) 
      } 
     } 
    } 

    buildTypes { 
    // ... (buildTypes, compileOptions, etc) 
    } 
} 

//... 

eklentisi hakkında unutmayın:

apply plugin: 'kotlin-kapt'

KOTLIN açıklama işlemci hakkında daha fazla bilgi için lütfen ziyaret edin: Kotlin docs