Room

La libreria di persistenza della stanza un livello di astrazione su SQLite per consentire un accesso più solido al database, sfruttando tutta la potenza di SQLite.
Aggiornamento più recente Release stabile Candidato per l'uscita Versione beta Release alpha
7 agosto 2024 2.6.1 - - 2.7.0-alpha06

Dichiarazione delle dipendenze

Per aggiungere una dipendenza a Room, devi aggiungere il Repository Maven di Google al tuo progetto. Consulta il Repository Maven di Google per ulteriori informazioni.

Le dipendenze per la stanza includono testare le migrazioni delle stanze e Sala RxJava

Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle per l'app o il modulo:

Groovy

dependencies {
    def room_version = "2.6.1"

    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"

    // To use Kotlin annotation processing tool (kapt)
    kapt "androidx.room:room-compiler:$room_version"
    // To use Kotlin Symbol Processing (KSP)
    ksp "androidx.room:room-compiler:$room_version"

    // optional - RxJava2 support for Room
    implementation "androidx.room:room-rxjava2:$room_version"

    // optional - RxJava3 support for Room
    implementation "androidx.room:room-rxjava3:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "androidx.room:room-guava:$room_version"

    // optional - Test helpers
    testImplementation "androidx.room:room-testing:$room_version"

    // optional - Paging 3 Integration
    implementation "androidx.room:room-paging:$room_version"
}

Kotlin

dependencies {
    val room_version = "2.6.1"

    implementation("androidx.room:room-runtime:$room_version")
    annotationProcessor("androidx.room:room-compiler:$room_version")

    // To use Kotlin annotation processing tool (kapt)
    kapt("androidx.room:room-compiler:$room_version")
    // To use Kotlin Symbol Processing (KSP)
    ksp("androidx.room:room-compiler:$room_version")

    // optional - Kotlin Extensions and Coroutines support for Room
    implementation("androidx.room:room-ktx:$room_version")

    // optional - RxJava2 support for Room
    implementation("androidx.room:room-rxjava2:$room_version")

    // optional - RxJava3 support for Room
    implementation("androidx.room:room-rxjava3:$room_version")

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation("androidx.room:room-guava:$room_version")

    // optional - Test helpers
    testImplementation("androidx.room:room-testing:$room_version")

    // optional - Paging 3 Integration
    implementation("androidx.room:room-paging:$room_version")
}

Per informazioni sull'utilizzo del plug-in KAPT, consulta la documentazione di KAPT.

Per informazioni sull'utilizzo del plug-in dei punti di forza principali, consulta la documentazione di avvio rapido dei punti di forza principali.

Per informazioni sull'utilizzo delle estensioni Kotlin, consulta la documentazione ktx.

Per saperne di più sulle dipendenze, consulta Aggiungere dipendenze nella build.

Facoltativamente, per le librerie non Android (ad es. moduli Gradle solo Java o Kotlin) puoi dipendere da androidx.room:room-common per utilizzare le annotazioni della stanza.

Configurazione delle opzioni del compilatore

La stanza virtuale ha le seguenti opzioni di processore delle annotazioni.

room.schemaLocation directory
Consente di esportare gli schemi dei database in file JSON nel . Vedi Migrazioni delle stanze per ulteriori informazioni.
room.incremental boolean
Abilita il processore di annotazione incrementale Gradle. Valore predefinito è true.
room.generateKotlin boolean
Genera file sorgente Kotlin anziché Java. Richiede punti di forza principali. Il valore predefinito è false. Vedi le note relative alla versione 2.6.0 per maggiori dettagli.

Usa il plug-in Room Gradle

Con Room versione 2.6.0 e successive, puoi utilizzare il plug-in Room Gradle per e configurare le opzioni per il compilatore delle stanze. Il plug-in configura il progetto in modo che ha generato schemi (che sono un output delle attività di compilazione utilizzate per le migrazioni automatiche) siano configurate correttamente per essere riproducibili memorizzabili nella cache.

Per aggiungere il plug-in, definisci nel file di build Gradle di primo livello e la relativa versione.

Alla moda

plugins {
    id 'androidx.room' version "$room_version" apply false
}

Kotlin

plugins {
    id("androidx.room") version "$room_version" apply false
}

Nel file di build Gradle a livello di modulo, applica il plug-in e usa l'room .

Alla moda

plugins {
    id 'androidx.room'
}

android {
    ...
    room {
        schemaDirectory "$projectDir/schemas"
    }
}

Kotlin

plugins {
    id("androidx.room")
}

android {
    ...
    room {
        schemaDirectory("$projectDir/schemas")
    }
}

Se utilizzi il plug-in Room Gradle, è necessario impostare un schemaDirectory. Questo configurerà il compilatore della stanza e le varie attività di compilazione e i suoi backend (javac, KAPT, KSP) per estrarre file di schema in cartelle personalizzate, ad esempio schemas/flavorOneDebug/com.package.MyDatabase/1.json. Questi file devono essere sono state archiviate nel repository per essere utilizzate per la convalida e le migrazioni automatiche.

Alcune opzioni non possono essere configurate in tutte le versioni del plug-in Room Gradle, anche se sono supportati dal compilatore Room. Nella tabella seguente sono elencati tutti e mostra la versione del plug-in Room Gradle che ha aggiunto il supporto per configurando questa opzione utilizzando l'estensione room. Se la tua versione è precedente, oppure, se l'opzione non è ancora supportata, puoi utilizzare opzioni del processore di annotazione.

Opzione Dalla versione
room.schemaLocation (campo obbligatorio) 2.6.0
room.incremental -
room.generateKotlin -

Utilizza le opzioni del processore di annotazione

Se non utilizzi il plug-in Room Gradle o se l'opzione che ti interessa non è supportato dalla tua versione del plug-in, puoi configurare la stanza virtuale utilizzando delle opzioni del processore di annotazione, come descritto Aggiungi dipendenze per la build. Come La specifica delle opzioni di annotazione dipende dall'uso o meno di KSP o KAPT per le stanze.

Alla moda

// For KSP
ksp {
    arg("option_name", "option_value")
    // other otions...
}

// For javac and KAPT
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += [
                    "option_name":"option_value",
                    // other options...
                    ]
            }
        }
    }
}

Kotlin

// For KSP
ksp {
    arg("option_name", "option_value")
    // other options...
}

// For javac and KAPT
android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += mapOf(
                    "option_name" to "option_value",
                    // other options...
                )
            }
        }
    }
}

Poiché room.schemaLocation è una directory e non un tipo primitivo, È necessario utilizzare CommandLineArgumentsProvider quando si aggiunge questa opzione in modo che che Gradle conosce questa directory quando esegue controlli aggiornati. Eseguire la migrazione del database della stanza mostra un'implementazione completa di CommandLineArgumentsProvider che fornisce la posizione dello schema.

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Non esitare a contattarci in caso di nuovi problemi o idee per migliorare questa raccolta. Dai un'occhiata alle problemi esistenti in questa raccolta, prima di crearne uno nuovo. Puoi aggiungere il tuo voto a un problema esistente tramite facendo clic sul pulsante a forma di stella.

Crea un nuovo numero

Consulta la documentazione di Issue Tracker per ulteriori informazioni.

Versione 2.7

Versione 2.7.0-alpha06

7 agosto 2024

Viene rilasciato androidx.room:room-*:2.7.0-alpha06. La versione 2.7.0-alpha06 contiene questi commit.

Modifiche alle API

  • Modifica la configurazione dell'istanza per un elemento RoomDatabase in un progetto KMP.

A causa del modello di compilazione Kotlin 2.0, la strategia di riferimento a una funzione da generare, denominata instantiateImpl(), è più efficace. Vengono introdotte due nuove API, @ConstructedBy e RoomDatabaseConstructor, che sostituiscono la strategia instantiateImpl(). La nuova strategia è la seguente:

  1. Definisci un oggetto previsto che implementa RoomDatabaseConstructor

      expect object MyDatabaseCtor : RoomDatabaseConstructor<MyDatabase>
    
  2. Collega l'oggetto con la dichiarazione @Database utilizzando @ConstructedBy

      @Database(...)
      @ConstructedBy(MyDatabaseCtor::class) // NEW
      abstract class MyDatabase : RoomDatabase
    
  3. Crea una nuova istanza di database ma senza passare un argomento di fabbrica

      fun createNewDatabase(path: String) =
        Room.databaseBuilder<AppDatabase>(name = path)
          .setDriver(BundledSQLiteDriver())
          .setQueryCoroutineContext(Dispatchers.IO)
          .build()
    

Correzioni b/316978491, b/338446862 e b/342905180

  • Supporto per @RawQuery in Room KMP con l'aggiunta di una nuova API denominata RoomRawQuery che è simile a SupportSQLiteQuery in termini di conservazione della stringa SQL non elaborata e una funzione per associare argomenti in un'istruzione. Le funzioni annotate di @RawQuery ora possono accettare un RoomRawQuery come singolo parametro. (Iea844, b/330586815)
  • Aggiungi un sovraccarico di setQueryCallback() che accetta un CoroutineContext. (Id66ff, b/309996304)
  • Aggiunto il supporto per linuxArm64 target multipiattaforma Kotlin (I139d3, b/338268719)

Correzioni di bug

  • Risolvi un problema per cui la stanza virtuale generava erroneamente una chiamata a recursiveFetchArrayMap in target non Android. (710c36, b/352482325)
  • Risolvi un problema per cui a volte Room generava un'eccezione "Timeout durante il tentativo di connessione" in un progetto KMP. (fa72d0, b/347737870)
  • È stato risolto un problema delle migrazioni automatiche che verificavano la presenza di chiavi esterne troppo presto prima che altre tabelle modificassero i propri schemi per renderli conformi alle nuove chiavi esterne. (7672c0, b/352085724)

Versione 2.7.0-alpha05

10 luglio 2024

Viene rilasciato androidx.room:room-*:2.7.0-alpha05. La versione 2.7.0-alpha05 contiene questi commit.

Modifiche alle API

  • SQLiteKt è stato rinominato in SQLite e BundledSQLiteKt in BundledSQLite. (I8b501)

Correzioni di bug

  • È stato corretto un bug per cui RoomDatabase causava un deadlock o un errore di timeout della connessione durante l'utilizzo di AndroidSQLiteDriver.

Versione 2.7.0-alpha04

12 giugno 2024

Viene rilasciato androidx.room:room-*:2.7.0-alpha04. La versione 2.7.0-alpha04 contiene questi commit.

Correzioni di bug

  • Risolto un problema del processore di annotazione di Room generava un codice KMP incompatibile quando veniva definito un tipo restituito multi-mappa in un DAO. (b/340983093)
  • Risolto un problema per cui Room non riusciva a trovare l'implementazione del database generata se la classe annotata @Database non aveva pacchetti. (b/342097292)
  • Risolto un problema per cui l'attivazione della chiusura automatica e dell'annullamento della convalida di più istanze a volte causava un errore ConcurrentModificationException quando il database veniva chiuso automaticamente per inattività.

Versione 2.7.0-alpha03

29 maggio 2024

Viene rilasciato androidx.room:room-*:2.7.0-alpha03. La versione 2.7.0-alpha03 contiene questi commit.

Correzioni di bug

  • Risolvi vari problemi relativi a Kotlin 2.0 e KSP 2.0. Si noti che Kotlin 2.0 con supporto KSP 2 non è completo e il team sta lavorando alle varie API e modifiche del comportamento nel nuovo compilatore. (b/314151707)

Versione 2.7.0-alpha02

14 maggio 2024

Viene rilasciato androidx.room:room-*:2.7.0-alpha02. La versione 2.7.0-alpha02 contiene questi commit.

Correzioni di bug

  • Sono stati risolti diversi problemi relativi ai punti di forza principali.

Versione 2.7.0-alpha01

1° maggio 2024

Viene rilasciato androidx.room:room-*:2.7.0-alpha01. La versione 2.7.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Assistenza Kotlin Multiplatform (KMP): in questa release, la stanza virtuale è stata sottoposta a refactoring per diventare una libreria Kotlin Multiplatform (KMP). Sebbene ci sia ancora del lavoro da fare, questa release introduce una nuova versione di Room in cui la maggior parte delle funzionalità è stata "comune" (realizzata per essere multipiattaforma). Le piattaforme attualmente supportate sono Android, iOS, JVM (desktop), Mac nativo e Linux nativo. Eventuali funzionalità mancanti nelle nuove piattaforme supportate verranno rese "complete" nelle prossime versioni delle stanze.

Per saperne di più su come iniziare a utilizzare Room KMP, consulta la documentazione ufficiale Room KMP.

  • La generazione del codice Kotlin su KSP è stata attivata per impostazione predefinita se l'elaborazione avviene tramite KSP. Per i progetti solo KAPT o Java, Room continuerà a generare origini Java.

Modifiche alle API

  • È stato aggiunto un sovraccarico di Room.databaseBuilder() che accetta un parametro lambda che deve essere utilizzato con una funzione generata da una stanza per evitare di utilizzare la riflessione quando si crea l'istanza dell'implementazione RoomDatabase generata. Esempio di utilizzo:
Room.databaseBuilder<MyDatabase>(
    context = appContext,
    name = dbFilePath,
    factory =  { MyDatabase::class.instantiateImpl() }
)
  • Allo strumento di creazione è stata aggiunta un'API per la configurazione di una stanza con un CoroutineContext: RoomDatabase.Builder.setQueryCoroutineContext. Tieni presente che un RoomDatabase può essere configurato solo con gli esecutori che utilizzano setQueryExecutor o con un contesto Coroutine, ma non entrambi.
  • È stata aggiunta un'API per la configurazione della stanza con un driver SQLite: RoomDatabase.Builder.setDriver(). Per saperne di più sull'API Driver SQLite, consulta la documentazione di SQLite KMP
  • Sono state aggiunte le API per accedere all'oggetto SQLiteConnection sottostante dalle API driver: RoomDatabase.useReaderConnection e RoomDatabase.useWriterConnection.
  • I callback relativi alle stanze virtuali ora hanno una versione sovraccarica che riceve SQLiteConnection anziché SupportSQLiteDatabase. Sono pensati per essere sostituiti durante la migrazione a un progetto KMP. Per ulteriori informazioni sulla migrazione degli utilizzi delle stanze in un'app per Android a un modulo KMP comune, consulta la guida alla migrazione. I richiami sono:
    • Migration.migrate(SQLiteConnection)
    • AutoMigrationSpec.onPostMigrate(SQLiteConnection)
    • RoomDatabase.Callback.onCreate(SQLiteConnection)
    • RoomDatabase.Callback.onDestructiveMigration(SQLiteConnection)
    • RoomDatabase.Callback.onOpen(SQLiteConnection)
  • L'artefatto KTX androidx.room:room-ktx è stato unito in androidx.room:room-runtime insieme a tutte le relative API e ora è vuoto. Rimuovila dall'elenco delle dipendenze.

Versione 2.6

Versione 2.6.1

29 novembre 2023

Viene rilasciato androidx.room:room-*:2.6.1. La versione 2.6.1 contiene questi commit.

Correzioni di bug

  • È stato risolto il problema nel codice generato in cui il valore predefinito per le colonne doppie in EntityCursorConverter veniva impostato su 0 anziché 0,0. È stata inclusa anche una potenziale correzione per un caso limite simile per le colonne di tipo Float. (Id75f5, b/304584179)
  • Le eccezioni generate dai caricamenti di PagingSource ora verranno propagate come LoadStateUpdate di LoadResult.Error contenente l'elemento Throwable. Questo stato di errore è osservabile tramite PagingDataAdapter.loadStateFlow(Views) o LazyPagingItems.loadState(Compose). Tieni presente che ciò contrassegna un cambiamento di comportamento per cui in passato gli errori di caricamento appaiono come un'eccezione generata dal metodo dao che ha attivato il caricamento. (I93887, b/302708983)

Versione 2.6.0

18 ottobre 2023

Viene rilasciato androidx.room:room-*:2.6.0. La versione 2.6.0 contiene questi commit.

Modifiche importanti dalla versione 2.5.0

  • L'opzione per abilitare la generazione del codice Kotlin (o "Kotlin CodeGen") è ora disponibile nel KSP della stanza. (4297ec0). Per attivare Kotlin CodeGen nella stanza virtuale, aggiungi il nome dell'opzione room.generateKotlin alle opzioni relative al processore per KSP. Per ulteriori dettagli su come passare le opzioni del processore per il punto di forza principale, consulta la documentazione del punto di forza principale.

Nota:quando usi Kotlin CodeGen, è importante notare che sono state aggiunte altre limitazioni. Le proprietà astratte come getter DAO o query DAO in Kotlin CodeGen non sono consentite e dovrebbero invece essere riscritte come funzioni per evitare la falsa nozione che il valore della proprietà sia immutabile e abbia un risultato memorizzato fisso. Un'altra limitazione che è stata aggiunta è che i tipi di reso delle raccolte Nullable non sono più consentiti nella stanza per Kotlin CodeGen.

Attenzione: potresti scoprire che i tuoi progetti sono più rigidi in termini di nullità quando utilizzi Kotlin CodeGen. In Kotlin CodeGen, il valore null degli argomenti di tipo è importante, mentre in Java questo viene per lo più ignorato. Ad esempio, supponiamo di avere un tipo restituito "Flow<foo\>" e che la tabella sia vuota. In Java CodeGen, non causa alcun problema, ma in Kotlin CodeGen riceverai un errore. Per evitarlo, dovrai usare "Flow<foo?\>", supponendo che venga emesso un valore null. </foo?\></foo\>

  • Il nuovo artefatto del plug-in Room Gradle è stato aggiunto a Room con ID androidx.room, che risolve vari problemi esistenti in Room relativi all'utilizzo di input e output di schemi tramite le opzioni del processore di annotazione Gradle. Per ulteriori dettagli, consulta le note di rilascio della versione 2.6.0-alpha02 della sala.
  • Ora le classi di valore in Entità stanza sono supportate per i punti di forza principali. (4194095)
  • I tipi di restituzione delle mappe nidificate nelle funzioni DAO sono ora supportati nella stanza virtuale. (I13f48, 203008711)

Versione 2.6.0-rc01

20 settembre 2023

Viene rilasciato androidx.room:room-*:2.6.0-rc01. La versione 2.6.0-rc01 contiene questi commit.

Versione 2.6.0-beta01

23 agosto 2023

Viene rilasciato androidx.room:room-*:2.6.0-beta01. La versione 2.6.0-beta01 contiene questi commit.

Correzioni di bug

  • Gestione dell'eccezione SQLite relativa al caso speciale durante l'upsert riscontrato quando viene generata l'eccezione 2067 SQLITE_CONSTRAINT_UNIQUE durante un upsert. L'upsert deve eseguire un aggiornamento. (If2849, b/243039555)

Versione 2.6.0-alpha03

9 agosto 2023

Viene rilasciato androidx.room:room-*:2.6.0-alpha03. La versione 2.6.0-alpha03 contiene questi commit.

Nuove funzionalità

  • I tipi di restituzione delle mappe nidificate nelle funzioni DAO sono ora supportati nella stanza virtuale. (I13f48, 203008711)

Modifiche alle API

  • Una nuova annotazione di tipo denominata @MapColumn è stata creata per sostituire @MapInfo, che ora è deprecata. Per ogni nome di colonna (keyColumnName, valueColumnName o entrambi) fornito in un'annotazione @MapInfo, dovrai dichiarare un'annotazione @MapColumn solo con columnName e utilizzare l'annotazione sull'argomento del tipo specifico a cui viene fatto riferimento (la chiave o il valore della mappa) nel tipo restituito della funzione DAO. Questo perché l'annotazione @MapColumn viene utilizzata direttamente sull'argomento type all'interno del tipo restituito di una funzione DAO, anziché sulla funzione stessa come @MapInfo. Per saperne di più, consulta la documentazione relativa a @MapColumn. (Ib0305, b/203008711)
  • File API aggiornati per annotare l'eliminazione della compatibilità (I8e87a, b/287516207)
  • Le API del plug-in Room Gradle sono state aggiornate in modo che non richiedano sempre configurazioni per variante. Ciò significa che il plug-in può accettare una posizione globale per tutte le varianti senza creare più directory, consentendo migrazioni più fluide ma anche abbastanza flessibile da configurare manualmente versioni o schemi dei tipi di build pur mantenendo i vantaggi del plug-in (build riproducibili e memorizzabili nella cache). (I09d6f, b/278266663)

Correzioni di bug

  • È stata corretta la potenziale vulnerabilità di perdita di memoria in QueryInterceptorStatement. (I193d1)
  • È stato corretto il comportamento errato nella funzione QueryInterceptorDatabase execSQL(). (Iefdc8)

Versione 2.6.0-alpha02

21 giu 2023

Viene rilasciato androidx.room:room-*:2.6.0-alpha02. La versione 2.6.0-alpha02 contiene questi commit.

Plug-in Gradle per stanza

Questa nuova release contiene un nuovo artefatto per il plug-in Room Gradle con ID androidx.room, che risolve vari problemi esistenti in Room relativi all'utilizzo di input e output di schemi tramite le opzioni del processore di annotazione Gradle. Il plug-in Room Gradle configura il progetto in modo che gli schemi generati utilizzati per le migrazioni automatiche e l'output delle attività di compilazione siano configurati correttamente per avere build riproducibili e memorizzabili nella cache. Il plug-in offre un DSL per configurare la posizione dello schema di base:

room {
    schemaDirectory("$projectDir/schemas/")
}

Il plug-in configurerà quindi il compilatore Room, le varie attività di compilazione e i relativi backend (javac, KAPT, KSP) per estrarre i file di schema in cartelle personalizzate, ad esempio schemas/flavorOneDebug/com.package.MyDatabase/1.json. Come di consueto, questi file vengono inseriti nel repository da utilizzare per la convalida e le migrazioni automatiche. Dopo la migrazione all'utilizzo del plug-in anziché delle opzioni del processore di annotazione, i file di schema esistenti devono essere copiati nelle directory flavor generate e create dal plug-in. Si tratta di un'operazione di migrazione una tantum che deve essere eseguita manualmente. La documentazione relativa allo schema in developers.android.com verrà aggiornata in futuro una volta che avremo gestito il feedback e che il plug-in raggiungerà la sua stabilità. Prova quindi.

Modifiche alle API

  • RoomDatabase.QueryCallback è stata definita come un'interfaccia funzionale per consentire l'utilizzo delle conversioni da parte di SAM. (Iab8ea, b/281008549)

Correzioni di bug

  • Risoluzione del problema derivante dalla creazione di un'istanza del database in Robolectric dopo la migrazione delle origini Room da Java a Kotlin. (Ic053c, b/274924903)

Versione 2.6.0-alpha01

22 marzo 2023

Viene rilasciato androidx.room:room-*:2.6.0-alpha01. La versione 2.6.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Supporto di classi di valore in Room for KSP. La stanza virtuale è ora in grado di supportare le classi di valore in Entità. (4194095)
  • La generazione di codice Kotlin(o "Kotlin CodeGen") ora può essere attivata nella stanza (4297ec0). Per attivare Kotlin CodeGen nella stanza virtuale, aggiungi il nome dell'opzione room.generateKotlin alle opzioni relative al processore per KSP. Per ulteriori dettagli su come passare le opzioni del processore per il punto di forza principale, consulta la documentazione del punto di forza principale.

Nota:quando usi Kotlin CodeGen, è importante notare che sono state aggiunte altre limitazioni. Le proprietà astratte come getter DAO o query DAO in Kotlin CodeGen non sono consentite e dovrebbero invece essere riscritte come funzioni per evitare la falsa nozione che il valore della proprietà sia immutabile e abbia un risultato memorizzato fisso. Un'altra limitazione che è stata aggiunta è che i tipi di reso delle raccolte Nullable non sono più consentiti nella stanza per Kotlin CodeGen.

Attenzione: potresti scoprire che i tuoi progetti sono più rigidi in termini di nullità quando utilizzi Kotlin CodeGen. In Kotlin CodeGen, il valore null degli argomenti di tipo è importante, mentre in Java questo viene per lo più ignorato. Ad esempio, supponiamo di avere un tipo restituito "Flow<foo\>" e che la tabella sia vuota. In Java CodeGen, non causa alcun problema, ma in Kotlin CodeGen riceverai un errore. Per evitarlo, dovrai usare "Flow<foo?\>", supponendo che venga emesso un valore null. </foo?\></foo\>

Modifiche alle API

  • Prevenire l'uso privo di significato di raccolte con valori null nei tipi di restituzione del metodo DAO. (I777dc, b/253271782, b/259426907)
  • Aggiungi un'API per la creazione di un flusso che emette modifiche del tracker di invalidazione. L'API è utile per creare flussi che devono reagire alle modifiche del database. (I8c790, b/252899305)

Correzioni di bug

  • Non consentire proprietà astratte come getter DAO o query DAO nel codegen Kotlin, ma devono essere riscritte come funzioni per evitare la falsa nozione che il valore della proprietà è immutabile e ha un risultato memorizzato fisso. (If6a13, b/127483380, b/257967987)

Versione 2.5.2

Versione 2.5.2

21 giu 2023

Viene rilasciato androidx.room:room-*:2.5.2. La versione 2.5.2 contiene questi commit.

Correzioni di bug

  • Risolvi un problema di incompatibilità con kotlinx-metadata-jvm. (386d5c)
  • Risolvi un problema che causava la generazione di un errore da parte di Room durante l'utilizzo in un test Robolectric. (f79bea, b/274924903)

Versione 2.5.1

Versione 2.5.1

22 marzo 2023

Viene rilasciato androidx.room:room-*:2.5.1. La versione 2.5.1 contiene questi commit.

Correzioni di bug

  • Se il database è già aperto, evita di controllare la directory superiore del database in FrameworkSQLiteHelper. (5de86b8)
  • Utilizza un controllo isOpenInternal per verificare se il database è già aperto. (e91fb35)
  • È ora disponibile una migliore gestione della richiesta rientrante nella stanza acquireTransactionThread(). (219f98b). Durante una transazione di sospensione, la stanza virtuale utilizza un thread dell'esecutore delle transazioni, avvia un loop di eventi al suo interno e invia la sospensione delle operazioni del database in modo che vengano tutte incapsulate nella coroutine della transazione. In genere ci si aspetta che il thread delle transazioni sia diverso da quello che inizia la transazione, ma in alcuni casi sono uguali. Per gestire questi casi di rientro, withTransaction() è stato sottoposto a refactoring in modo che non si basi più su un job di controllo e eseguirà invece il blocco delle transazioni di sospensione dall'interno di runBlocking nel thread delle transazioni.

Versione 2.5.0

Versione 2.5.0

22 febbraio 2023

Vengono rilasciate le funzionalità androidx.room:room-paging-guava:2.5.0, androidx.room:room-paging-rxjava2:2.5.0 e androidx.room:room-paging-rxjava3:2.5.0. La versione 2.5.0 contiene questi commit.

Versione 2.5.0

11 gennaio 2023

Viene rilasciato androidx.room:room-*:2.5.0. La versione 2.5.0 contiene questi commit.

Modifiche importanti dalla versione 2.4.0

  • Tutte le origini room-runtime sono state convertite da Java a Kotlin. Tieni presente che potresti riscontrare problemi di incompatibilità della fonte se il tuo codice è in Kotlin a causa della conversione della libreria in Kotlin. Ad esempio, una modifica nota incompatibile con l'origine è che in InvalidationTracker ora devi dichiarare onInvalidate() in Observer per avere un parametro di tipo Set e non MutableSet. Inoltre, alcuni metodi getter sono stati convertiti in proprietà che richiedono la sintassi di accesso alle proprietà nei file Kotlin. Segnala un bug in caso di incompatibilità significative.
  • È stata aggiunta una nuova annotazione di scorciatoia, @Upsert, che tenta di inserire un'entità in assenza di conflitti di univocità oppure di aggiornare l'entità in caso di conflitto. (I7aaab, b/241964353)
  • I nuovi elementi di impaginazione delle stanze room-paging-rxjava2, room-paging-rxjava3 e room-paging-guava sono stati aggiunti per il supporto nell'opzione Paging delle stanze.
  • Sono state aggiunte API per specificare i nomi delle tabelle di chiavi e valori per la disambiguazione in @MapInfo (Icc4b5)

Versione 2.5.0-rc01

7 dicembre 2022

Viene rilasciato androidx.room:room-*:2.5.0-rc01. La versione 2.5.0-rc01 contiene questi commit.

  • Questa release è identica a 2.5.0-beta02.

Versione 2.5.0-beta02

9 novembre 2022

Viene rilasciato androidx.room:room-*:2.5.0-beta02. La versione 2.5.0-beta02 contiene questi commit.

Modifiche alle API

  • Correggi varie API che trasformano gli argomenti delle query da invarianti (Array<Any?>) a contravarianti (Array<out Any?>) per corrispondere al comportamento dell'array di Java. (b/253531073)

Versione 2.5.0-beta01

5 ottobre 2022

Viene rilasciato androidx.room:room-*:2.5.0-beta01. La versione 2.5.0-beta01 contiene questi commit.

Modifiche alle API

  • Limita l'API 16 come versione minima che supporta @Upsert. Ciò è dovuto all'impossibilità di identificare un conflitto di vincolo di chiave primaria nelle API meno recenti. (I5f67f, b/243039555)

Correzioni di bug

  • Risolto un problema per cui le tabelle shadow venivano esportate erroneamente nei file .json dello schema, danneggiandole. (I4f83b, b/246751839)

Versione 2.5.0-alpha03

24 agosto 2022

Viene rilasciato androidx.room:room-*:2.5.0-alpha03. La versione 2.5.0-alpha03 contiene questi commit.

Nuove funzionalità

  • È stata aggiunta una nuova annotazione di scorciatoia, @Upsert, che tenta di inserire un'entità in assenza di conflitti di univocità oppure di aggiornare l'entità in caso di conflitto. (I7aaab, b/241964353)

Correzioni di bug

  • La stanza virtuale ora genererà un SQLiteConstraintException anziché un IllegalStateException durante un controllo del vincolo di chiave esterna della migrazione automatica. (I328gg)
  • Correggi una modifica incompatibile con l'origine Kotlin di getter / proprietà di getOpenHelper, getQueryExecutor e getTransactionExecutor. (Iad0ac)

Versione 2.5.0-alpha02

1 giugno 2022

Viene rilasciato androidx.room:room-*:2.5.0-alpha02. La versione 2.5.0-alpha02 contiene questi commit.

Nuove funzionalità

Modifiche alle API

  • Tutto room-runtime è stato convertito da Java a Kotlin. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c252) ﮮb

    Nota:potresti riscontrare problemi di incompatibilità della fonte a causa della conversione della libreria in Kotlin. Se il tuo codice era in Kotlin e chiamava la versione precedente di Room, la nuova versione dovrà gestire questi casi. Ad esempio, una modifica nota incompatibile con l'origine è che in InvalidationTracker ora devi dichiarare onInvalidate() in Observer per avere un parametro di tipo Set e non MutableSet.

  • Sono state aggiunte API per specificare i nomi delle tabelle di chiavi e valori per la disambiguazione in @MapInfo (Icc4b5)
  • Risolvi un problema di compatibilità della sorgente per riautorizzare @Ignore nei getter di proprietà. (Ifc2fb).

Correzioni di bug

  • Algoritmo euristico di risoluzione delle colonne duplicato. La stanza virtuale cercherà di risolvere le colonne ambigue in una query a più mappe. In questo modo i JOIN con tabelle contenenti tabelle con lo stesso nome possono essere mappati correttamente a un oggetto dati dei risultati. (I4b444, b/201306012, b/212279118)

Versione 2.5.0-alpha01

23 febbraio 2022

Viene rilasciato androidx.room:room-*:2.5.0-alpha01. La versione 2.5.0-alpha01 contiene questi commit.

Modifiche alle API

  • È stato risolto un problema per cui l'utilizzo della stanza @IntDef non veniva applicato in modo forzato nelle origini Kotlin. (I75f41, b/217951311)
  • È stato risolto un problema di compatibilità della sorgente per riautorizzare @Query nei getter di proprietà. (I0a09b)
  • Stanza comune convertita da Java a Kotlin. (I69c48, b/206858235)

    Nota:potresti riscontrare problemi di incompatibilità della fonte perché alcune proprietà sono state spostate negli oggetti companion durante la conversione della libreria in Kotlin. Se il tuo codice era in Kotlin e chiamava la versione precedente di Room, la nuova versione dovrà avere il file ".Companion" quando si accede a queste proprietà.

  • Migrazione delle stanze convertita da Java a Kotlin. (I2724b, b/206858622)
  • paging file correlati convertiti in room-runtime da Java a Kotlin. (I82fc8, b/206859668)
  • Aggiunta un'API per il blocco e l'utilizzo multi-processo a livello di FrameworkSQLite*, al fine di proteggere la creazione e le migrazioni di database multi-processo la prima volta. (Ied267, b/193182592)

Correzioni di bug

  • È stato aggiunto il supporto per le proprietà interne nelle origini Kotlin. Si tratta di un lieve cambiamento del comportamento nella stanza virtuale in cui verrà utilizzata l'origine nome delle funzioni abbinandole alle proprietà come getter/setter (in precedenza, utilizzava il nome JVM della funzione, che è diverso per funzioni/proprietà interne). Se utilizzi annotazioni @JvmName personalizzate per abbinare getter/setter alle proprietà private, controlla attentamente il codice generato dopo aggiorna (If6531, b/205289020)

Versione 2.4.3

Versione 2.4.3

27 luglio 2022

Viene rilasciato androidx.room:room-*:2.4.3. La versione 2.4.3 contiene questi commit.

Correzioni di bug

  • Risolto un problema che impediva a Room di riconoscere le funzioni di sospensione in Kotlin 1.7 (b/236612358)

Versione 2.4.2

Versione 2.4.2

23 febbraio 2022

Viene rilasciato androidx.room:room-*:2.4.2. La versione 2.4.2 contiene questi commit.

Correzioni di bug

  • Risolvi un problema di generazione del codice per una funzione di sospensione Dao @Transaction con un corpo che genera un metodo di interfaccia predefinito a causa della compilazione con -Xjvm-default=all o equivalente. (Ia4ce5).
  • Risoluzione di un bug in cui Room genera il codice per un metodo di query di tipo restituito Array<ByteArray>. (If086e, b/213789489)

Versione 2.4.1

Versione 2.4.1

12 gennaio 2022

Viene rilasciato androidx.room:room-*:2.4.1. La versione 2.4.1 contiene questi commit.

Correzioni di bug

  • È stato aggiunto il supporto per le proprietà interne nelle origini Kotlin. Si tratta di un lieve cambiamento del comportamento nella stanza virtuale in cui verrà utilizzata l'origine nome delle funzioni abbinandole alle proprietà come getter/setter (in precedenza, utilizzava il nome JVM della funzione, che è diverso per funzioni/proprietà interne). Se utilizzi annotazioni @JvmName personalizzate per abbinare getter/setter alle proprietà private, controlla attentamente il codice generato dopo aggiorna (If6531, b/205289020)

Versione 2.4.0

Versione 2.4.0

15 dicembre 2021

Viene rilasciato androidx.room:room-*:2.4.0. La versione 2.4.0 contiene questi commit.

Modifiche importanti dalla versione 2.3.0

  • Migrazioni automatiche: ora la stanza virtuale offre un'API per generare automaticamente le migrazioni purché vengano esportati gli schemi. Per comunicare alla stanza virtuale che deve generare una migrazione automatica, è possibile utilizzare una nuova proprietà @Database#autoMigrations per dichiarare le versioni da e verso le quali eseguire la migrazione automatica. Quando Room ha bisogno di informazioni aggiuntive sulle ridenominazioni o eliminazioni di tabelle e colonne, l'annotazione @AutoMigration può dichiarare una classe di specifiche contenente questi input. Per ulteriori dettagli, consulta la documentazione di @AutoMigration.
  • Iniezione di dipendenze nelle migrazioni automatiche: @ProvidedAutoMigrationSpec è una nuova API per dichiarare che AutoMigrationSpec verrà fornito in fase di runtime tramite RoomDatabase.Builder#addAutoMigrationSpec(). Ciò consente a un framework di inserimento delle dipendenze per fornire queste specifiche quando sono necessarie dipendenze complesse.
  • Supporto del test di migrazione per le migrazioni automatiche: MigrationTestHelper della stanza è stato aggiornato per supportare le migrazioni automatiche fornendo una nuova API costruttore che riceve la classe del database in fase di test. In questo modo l'assistente può aggiungere automaticamente le migrazioni automatiche allo stesso modo durante runMigrationsAndValidate.
  • Assistenza per Room-Paging: viene rilasciato androidx.room:room-paging, che fornisce il supporto nativo di Paging 3.0 per le query relative alle stanze virtuali che restituiscono androidx.paging.PagingSource.
  • Metodi di query relazionali: ora Room supporta i metodi @Dao con tipi di restituzione multimappe, utili per le istruzioni JOIN. I tipi di multimappe supportati sono Map, SparseArray, LongSparseArray, insieme ai ImmutableMap, ImmutableSetMultimap e ImmutableListMultimap di Guava.

Versione 2.4.0-rc01

1 dicembre 2021

Viene rilasciato androidx.room:room-*:2.4.0-rc01. La versione 2.4.0-rc01 contiene questi commit.

Nuove funzionalità

  • Aggiorna la dipendenza di Room dal KSP a 1.6.0-1.0.1 per supportare Kotlin 1.6

Versione 2.4.0-beta02

17 novembre 2021

Viene rilasciato androidx.room:room-*:2.4.0-beta02. La versione 2.4.0-beta02 contiene questi commit.

Nuove funzionalità

  • Abbiamo aggiunto il supporto per SparseArray e LongSparseArray in @MapInfo. (Ic91a2b/138910317)

Correzioni di bug

  • Abbiamo aggiunto un nuovo analizzatore TypeConverter che supporta i valori null le informazioni per tipo. Poiché queste informazioni sono disponibili solo nei punti di forza principali, è attivo per impostazione predefinita solo nei punti di forza principali. Se ciò causa problemi, puoi disattivarlo room.useNullAwareTypeAnalysis=false all'annotazione di fatturazione. In tal caso, segnala un bug, poiché questo flag verrà rimosso in futuro. Con questo nuovo analizzatore TypeConverter, si consiglia di fornire solo TypeConverter che ricevono valori non null poiché il nuovo analizzatore ha la possibilità per aggregarli con un controllo nullo. Tieni presente che ciò non influisce sugli utenti che utilizzano KAPT o Java come processori di annotazione (a differenza di KSP), non hanno informazioni sui valori nulli di tipi. (Ia88f9, b/193437407)
  • È stato corretto un bug per cui Room non veniva compilato con un errore SQL quando un'entità FTS dichiarava di utilizzare il tokenizzatore di ICU. (I00db9, b/201753224)
  • È stato risolto il problema nelle migrazioni automatiche relativo a una nuova colonna aggiunta a un'entità incorporata tra le versioni. (I5fcb1b/193798291)
  • Abbiamo risolto un problema relativo ai tipi di restituzione del metodo di query relazionali nelle query LEFT JOIN. Con queste modifiche, nel caso in cui sia presente un mapping 1-many, la raccolta restituita per una chiave non includerà l'oggetto valore non valido se non viene rilevato nel cursore. Se non vengono trovati valori validi, una chiave verrà mappata a una raccolta vuota. (ID5552b/201946438)
  • È stato risolto il problema di migrazione automatica per cui non era possibile utilizzare i caratteri di escape nei nomi delle colonne per le parole chiave SQLite. (Idbed4b/197133152)

Versione 2.4.0-beta01

13 ottobre 2021

Viene rilasciato androidx.room:room-*:2.4.0-beta01. La versione 2.4.0-beta01 contiene questi commit.

Correzioni di bug

  • È stato risolto un problema relativo alla mancata aggiunta di nuove colonne nelle migrazioni automatiche quando anche un'altra tabella nella stessa migrazione automatica aveva una nuova colonna con lo stesso nome. (Ia5db5, b/200818663)
  • L'implementazione di PagingSource generata dal caricamento delle pagine delle stanze utilizza queryExecutor trasmesso a RoomDatabase.Builder, in modo che possa anziché Dispatchers.IO in precedenza. (Iae259).

Versione 2.4.0-alpha05

29 settembre 2021

Viene rilasciato androidx.room:room-*:2.4.0-alpha05. La versione 2.4.0-alpha05 contiene questi commit.

Nuove funzionalità

Modifiche alle API

  • È stata aggiunta una nuova proprietà all'annotazione TypeConverters per consentire agli sviluppatori di disattivare i convertitori Enum e UUID integrati. Per impostazione predefinita, questi convertitori sono attivi, ma puoi disabilitarli per un determinato ambito o per l'intero database. Per i dettagli, consulta la documentazione TypeConverters. (36ae9e, b/195413406)

  • Supporto di chiavi/valori non POJO per i tipi restituiti Multimap nei DAO tramite l'annotazione @MapInfo. (I4d704)

La colonna @MapInfo è obbligatoria se la colonna chiave o valore della mappa proviene da una singola colonna. Vedi l'esempio:

@MapInfo(valueColumn = "songCount")
@Query("""
       SELECT *, COUNT(mSongId) as songCount
       FROM Artist JOIN Song ON Artist.artistName = Song.artist
       GROUP BY artistName
       """)
fun getArtistAndSongCounts(): Map<Artist, Integer>
  • Rendi room-paging un artefatto obbligatorio quando utilizzi Paging3 con Stanza. (Ieaffe)

Correzioni di bug

  • È stato risolto un problema per cui i risultati delle query multimappa non venivano ordinati in modo corretto quando la query conteneva una clausola ORDER BY di una colonna della chiave della mappa. (I6b887)

Contributo esterno

  • È stata aggiunta una nuova API per specificare l'ordine dell'indice in @Index. Grazie a Nikita Zhelonkin. (I033fc)

Versione 2.4.0-alpha04

21 luglio 2021

Viene rilasciato androidx.room:room-*:2.4.0-alpha04. La versione 2.4.0-alpha04 contiene questi commit.

Nuove funzionalità

  • La stanza virtuale ora supporta i metodi @Dao con tipi restituiti multimap, utili per le istruzioni JOIN. I tipi di multimappe supportati sono Map insieme a ImmutableMap, ImmutableSetMultimap e ImmutableListMultimap di Guava.

    Di seguito sono riportati alcuni esempi di query a mappa multipla:

    Mappa relazione one-to-one

    @Query("SELECT * FROM Song JOIN Artist ON Song.artistId = Artist.artistId")
    fun getSongAndArtist(): Map<Song, Artist>
    

    Mappa relazione one-to-many (mappa multimappa standard)

    @Query("SELECT * FROM Artist JOIN Album ON Artist.id = Album.artistId")
    fun getArtistAndAlbums(): Map<Artist, List<Album>>
    

    Il risultato multimappa può anche essere aggregato nei tipi restituiti asincroni supportati, come LiveData, Observable di Rx o coroutine Flow.

Pacchetto stanza

  • Viene rilasciato androidx.room:room-paging, che fornisce il supporto nativo di Paging 3.0 per le query delle stanze virtuali che restituiscono androidx.paging.PagingSource.

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun loadUsers(): PagingSource<Int, User>
    }
    
  • Questo artefatto sostituisce l'implementazione androidx.paging.PagingSource generata da Room con uno basato sulle API Paging 3.0. La nuova implementazione di PagingSource analizza le chiavi in modo diverso, quindi qualsiasi chiave fornita manualmente a PagingSource di Room deve tenere conto di questa modifica del comportamento, inclusa la chiave iniziale passata tramite il costruttore di Pager. Il caricamento delle pagine inizierà da Key e Key sarà il primo elemento caricato. Si discosta dal comportamento esistente in cui LoadParams.Refresh.Key viene considerato la posizione di scorrimento dell'utente e gli elementi vengono caricati prima e dopo la chiave.

  • L'artefatto è facoltativo e la disattivazione comporterà il fallback al supporto esistente per Paging 3.0 che è stato introdotto nella stanza 2.3. Tuttavia, questo elemento diventerà non facoltativo nella release futura per chi utilizza la stanza virtuale 3.0. Per l'attivazione, aggiungi il nuovo artefatto di impaginazione delle stanze al tuo classpath. Se utilizzi Gradle, puoi aggiungere il seguente snippet al file build.gradle:

    dependency {
      implementation("androidx.room:room-paging:2.4.0-alpha04")
    }
    

Correzioni di bug

  • È stato risolto un problema relativo alla gestione delle violazioni delle chiavi esterne nelle migrazioni automatiche. (b/190113935)

Versione 2.4.0-alpha03

16 giugno 2021

Viene rilasciato androidx.room:room-*:2.4.0-alpha03. La versione 2.4.0-alpha03 contiene questi commit.

Modifiche alle API

  • Aggiorna MigrationTestHelper della stanza virtuale per supportare le migrazioni automatiche fornendo una nuova API costruttore che riceve la classe del database sottoposta a test. In questo modo l'assistente può aggiungere automaticamente le migrazioni automatiche allo stesso modo durante runMigrationsAndValidate.

Correzioni di bug

  • È stato risolto un problema relativo alla libreria nativa SQLite di Room per supportare i chip M1 di Apple. (b/174695268

  • Risolto un problema per cui la stanza virtuale non generava errori quando il tipo restituito di una funzione @Transaction era un flusso (I56ddd, b/190075899)

  • È stato risolto un problema relativo agli indici nelle migrazioni automatiche. B/177673291

Aggiornamenti delle dipendenze

  • Il supporto dei punti di forza principali della stanza ora dipende dal punto di forza principale 1.5.10-1.0.0-beta01. (1ecb11, b/160322705)

Versione 2.4.0-alpha02

5 maggio 2021

Viene rilasciato androidx.room:room-*:2.4.0-alpha02. La versione 2.4.0-alpha02 contiene questi commit.

Modifiche alle API

  • @ProvidedAutoMigrationSpec è una nuova API per dichiarare che verrà fornito un AutoMigrationSpec in fase di runtime tramite RoomDatabase.Builder#addAutoMigrationSpec(). Ciò consente a un framework di inserimento delle dipendenze per fornire queste specifiche quando sono necessarie dipendenze complesse.

Correzioni di bug

  • È stato risolto un problema relativo alle migrazioni automatiche in cui i @DatabaseView non venivano ricreati correttamente.

Contributo esterno

  • Risolvi un problema in JournalMode.TRUNCATE della stanza virtuale per cui il callback InvalidationTracker a volte veniva richiamato in modo non valido, troppo tardi o non veniva affatto chiamato. Grazie a Uli Bubenheimer | bubenheimer@users.noreply.github.com (b/154040286)

Versione 2.4.0-alpha01

21 aprile 2021

Viene rilasciato androidx.room:room-*:2.4.0-alpha01. La versione 2.4.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Migrazioni automatiche: ora la stanza virtuale offre un'API per generare automaticamente le migrazioni purché vengano esportati gli schemi. Per comunicare alla stanza virtuale che deve generare una migrazione automatica, è possibile utilizzare una nuova proprietà @Database#autoMigrations per dichiarare le versioni da e verso le quali eseguire la migrazione automatica. Quando Room ha bisogno di informazioni aggiuntive sulle ridenominazioni o eliminazioni di tabelle e colonne, l'annotazione @AutoMigration può dichiarare una classe di specifiche contenente questi input. Per ulteriori dettagli, consulta la documentazione di @AutoMigration.

Correzioni di bug

  • È stato risolto un problema per cui defaultValue con parentesi aggiuntive veniva convalidato in modo errato dalla convalida dello schema della stanza. b/182284899

Versione 2.3.0

Versione 2.3.0

21 aprile 2021

Viene rilasciato androidx.room:room-*:2.3.0. La versione 2.3.0 contiene questi commit.

Modifiche importanti dalla versione 2.2.0

  • Supporto enum integrato: la stanza ora utilizzerà per impostazione predefinita un convertitore enum in stringa e viceversa, se non viene fornito alcun convertitore di tipo Enum. Se esiste già un convertitore del tipo per un'enumerazione, la stanza virtuale darà la priorità all'utilizzo di quello predefinito.
  • Callback query: ora Room offre un'API di callback generale RoomDatabase.QueryCallback, utile quando stanno per eseguire le query, che può essere utile per accedere alle build di debug. Il callback può essere impostato tramite RoomDatabase.Builder#setQueryCallback().
  • Miglioramento predefinito: ora Room dispone di API per la creazione di un database utilizzando un database predefinito che legge da un flusso di input. Ciò consente casi come i casi in cui il database predefinito viene compresso in formato gzip.
  • Convertitori di tipi forniti: ora Room dispone di API per fornire istanze dei convertitori di tipi in modo che l'app possa controllarne l'inizializzazione. Per contrassegnare un convertitore di tipi che verrà fornito alla stanza, utilizza la nuova annotazione @ProvidedTypeConverter.
  • Supporto RxJava3: la stanza virtuale ora supporta i tipi RxJava3. In modo simile a RxJava2, puoi dichiarare metodi DAO il cui tipo restituito è Flowable, Single, Forse e Completabile. Inoltre, è disponibile un nuovo artefatto androidx.room:room-rxjava3 per supportare RxJava3.
  • Assistenza per la release 3.0: ora Room supporterà la generazione di implementazioni per i metodi annotati @Query il cui tipo restituito è androidx.paging.PagingSource.

Versione 2.3.0-rc01

24 marzo 2021

Viene rilasciato androidx.room:room-*:2.3.0-rc01. La versione 2.3.0-rc01 contiene questi commit.

Correzioni di bug

  • Risolvi un problema che impediva la fruizione delle query Coroutine Flow create dalla stanza virtuale in un blocco withTransaction in fase di sospensione. (I797bf)

Versione 2.3.0-beta03

10 marzo 2021

Viene rilasciato androidx.room:room-*:2.3.0-beta03. La versione 2.3.0-beta03 contiene questi commit.

Nuove funzionalità

  • Aggiunto il supporto della compilazione incrementale per i punti di forza principali. (I031c1, b/176453350)

Correzioni di bug

  • È stato corretto un bug per cui la creazione di PagingSource nel thread principale poteva attivare un errore ANR. (I42b74, b/181221318)
  • È stato corretto il problema di visibilità di @ExperimentalRoomApi in modo che sia pubblica anziché privata del pacchetto. (b/181356119)

Contributo esterno

  • Consenti a Room di accettare un tipo restituito POJO in un metodo DAO annotato @Query quando è anche annotato con @SkipQueryVerification. La stanza virtuale farà il possibile per convertire il risultato della query nel tipo restituito POJO, proprio come avviene per un metodo DAO annotato @RawQuery. Grazie a "Markus Riegel | hey@marcorei.com". (I45acb)

Versione 2.3.0-beta02

18 febbraio 2021

Viene rilasciato androidx.room:room-*:2.3.0-beta02. La versione 2.3.0-beta02 contiene questi commit.

Nuove funzionalità

  • Room ora dispone del supporto sperimentale per il KSP di elaborazione dei simboli Kotlin.

    KSP sostituisce KAPT, in modo da eseguire i processori di annotazione in modo nativo sul compilatore Kotlin, riducendo notevolmente i tempi di compilazione.

    Per utilizzare Room with KSP, puoi applicare il plug-in Gradle del punto di forza e sostituire la configurazione kapt nel file di build con ksp. Ad esempio, invece di kapt 'androidx.room:room-compiler:2.3.0-beta02' usa ksp 'androidx.room:room-compiler:2.3.0-beta02'. Per ulteriori dettagli, consulta la documentazione del punto di forza principale.

    Tieni presente che, poiché il punto di forza principale è sperimentale, si consiglia di usare comunque KAPT per il codice di produzione. La riduzione dei tempi di build è applicabile solo se non ci sono altri processori che utilizzano KAPT. Per i problemi noti, vedi b/160322705.

Versione 2.3.0-beta01

27 gennaio 2021

Viene rilasciato androidx.room:room-*:2.3.0-beta01. La versione 2.3.0-beta01 contiene questi commit.

Nuove funzionalità

  • Database chiudibili automaticamente: la stanza virtuale ora può chiudere i database a cui non si accede dopo un determinato periodo di tempo. Questa è una funzionalità sperimentale e può essere attivata chiamando il numero RoomDatabase.Builder#setAutoCloseTimeout(). Questa funzionalità è utile per le applicazioni con più database.

Correzioni di bug

  • Risolvi un problema per cui i metodi Dao con più metodi @Update o @Delete con strategie di conflitto diverse generavano codice con una sola di queste strategie, ignorando di fatto quella definita. (/I0b90d, b/176138543)

Versione 2.3.0-alpha04

16 dicembre 2020

Viene rilasciato androidx.room:room-*:2.3.0-alpha04. La versione 2.3.0-alpha04 contiene questi commit.

Nuove funzionalità

  • Ora Room offre un'API di callback generale RoomDatabase.QueryCallback, per quando stanno per eseguire le query, che può essere utile per il logging nelle build di debug. Il callback può essere impostato tramite RoomDatabase.Builder#setQueryCallback(). (Iaa513, b/174478034, b/74877608)
  • Per impostazione predefinita, per la stanza virtuale verrà utilizzato un convertitore di tipo Enum in stringa e viceversa. Se esiste già un convertitore del tipo per un'enumerazione, la stanza virtuale darà la priorità all'utilizzo di quello predefinito. (b/73132006)

Problema noto

  • Se esiste già un convertitore unidirezionale per la lettura per Enum, Room potrebbe utilizzare accidentalmente il convertitore da stringa a enum integrato, cosa che potrebbe non essere desiderata. Si tratta di un problema noto che può essere risolto utilizzando un convertitore a due vie. Vedi: b/175707691

Correzioni di bug

  • Risolto un problema per cui la stanza virtuale disattivava erroneamente l'elaborazione delle annotazioni incrementali nelle versioni JDK più recenti. (b/171387388)
  • È stato risolto un problema relativo alla stanza che trovava la classe generata quando vengono utilizzati più caricatori di classi. Grazie per la correzione: "Serendipity | 892449346@qq.com’! (b/170141113)
  • È stato risolto un problema per cui Room generava un codice errato quando un @Dao Kotlin aveva una classe base i cui generici erano primitivi nella JVM. (b/160258066)

Contributo esterno

  • La stanza virtuale utilizzerà per impostazione predefinita beginTransactionNonExclusive se la modalità WAL è abilitata e l'API è almeno 16. Grazie a "Ahmed I. Khalil | ahmedibrahimkhali@gmail.com'! (b/126258791)

Versione 2.3.0-alpha03

14 ottobre 2020

Viene rilasciato androidx.room:room-*:2.3.0-alpha03. La versione 2.3.0-alpha03 contiene questi commit.

Nuove funzionalità

  • Room ora dispone di API per fornire istanze di convertitori di tipi in modo che l'app possa controllarne l'inizializzazione. Per contrassegnare un convertitore di tipi che verrà fornito alla stanza virtuale, utilizza la nuova annotazione @ProvidedTypeConverter. Grazie a "mzgreen yairobbe@gmail.com". (Ie4fa5, b/121067210)

  • Room ora dispone di API per la creazione di un database utilizzando un database predefinito che legge da un flusso di input. Ciò consente casi come i casi in cui il database predefinito viene compresso in formato gzip. Grazie a "Ahmed El-Helw ahmedre@gmail.com" (3e6792, b/146911060)

Modifiche alle API

  • È stato aggiunto il target mancante all'annotazione @ForeignKey, che ne impedisce l'utilizzo al di fuori dell'annotazione @Entity. (Iced1e)

  • Il campo mCallbacks in RoomDatabase.java è ora nascosto. (d576cb, b/76109329)

Correzioni di bug

  • Aggiornamento della documentazione TypeConverters per chiarire che TypeConverters può essere utilizzato solo per convertire colonne / campi e non per righe. (I07c56, b/77307836)

  • Esegui l'aggiornamento a DaoProcessor per correggere l'errore di compilazione su Dao con un super tipo generico con "primitivi" Kotlin. (Ice6bb, b/160258066)

  • Aggiorna la documentazione sui metodi di aggiunta/rimozione osserva per chiarire i thread (Ifd1d9, b/153948821)

  • Risolvi un problema per cui la stanza virtuale convalidava erroneamente le tabelle FTS che dichiaravano la relativa colonna ID riga. (d62ebc, b/145858914)

Contributi esterni

  • Risolvere i problemi relativi alle impostazioni internazionali in maiuscolo/minuscolo relativi a turco (5746e3), b/68159494

  • Sostituisci ConcurrentHashMap all'interno di RoomDatabase con Collections.synchronizedMap() per evitare problemi su Android Lollipop (d1cfc7, b/162431855)

  • Aggiungi un callback onOpenPrepackagedDatabase per quando un modello Il database è stato copiato. (I1ba74, b/148934423)

Versione 2.3.0-alpha02

22 luglio 2020

Viene rilasciato androidx.room:room-*:2.3.0-alpha02. La versione 2.3.0-alpha02 contiene questi commit.

Nuove funzionalità

  • Supporto RxJava3: la stanza virtuale ora supporta i tipi RxJava3. In modo simile a RxJava2, puoi dichiarare metodi DAO il cui tipo restituito è Flowable, Single, Forse e Completabile. Inoltre, è disponibile un nuovo artefatto androidx.room:room-rxjava3 per supportare RxJava3. (b/152427884)

Modifiche alle API

  • La dichiarazione @TypeConverter nella classe dell'oggetto Kotlin è ora supportata. (b/151110764)
  • L'opzione di elaborazione incrementale delle annotazioni della stanza è ora ATTIVA per impostazione predefinita. (b/112110217)

Versione 2.3.0-alpha01

10 giugno 2020

Viene rilasciato androidx.room:room-*:2.3.0-alpha01. La versione 2.3.0-alpha01 contiene questi commit.

Nuove funzionalità

  • Assistenza per la release 3.0: ora Room supporterà la generazione di implementazioni per@Query metodi annotati il cui tipo restituito è androidx.paging.PagingSource.

    @Dao
    interface UserDao {
      @Query("SELECT * FROM users ORDER BY id ASC")
      fun pagingSource(): PagingSource<Int, User>
    }
    

Modifiche alle API

  • @RewriteQueriesToDropUnusedColumns è una nuova pratica annotazione che consente alle stanze di riscrivere la proiezione "*" di una query in modo tale che le colonne inutilizzate nel risultato vengano rimosse.
  • L'opzione del processore room.expandProjection è ora deprecata. Utilizza @RewriteQueriesToDropUnusedColumns come sostituzione per le query che ottimizzano le stanze con proiezioni a stella. Tieni presente che @RewriteQueriesToDropUnusedColumns non sostituisce la soluzione di conflitto di colonne room.expandProjection offerta per quanto riguarda i tipi restituiti che contenevano campi @Embedded.

Correzioni di bug

  • È stato corretto un bug per cui la stanza virtuale non rilevava correttamente la versione JDK utilizzata per abilitare il processore di annotazione incrementale. Grazie a Blaz Solar (me@blaz.solar) (b/155215201)
  • Ora Room incorpora la dipendenza ANTLR con il processore di annotazione per evitare conflitti di versione con altri processori che utilizzano ANTLR. (b/150106190)

Versione 2.2.6

Versione 2.2.6

16 dicembre 2020

Viene rilasciato androidx.room:room-*:2.2.6. La versione 2.2.6 contiene questi commit.

Correzioni di bug

  • Risolto un problema per cui la stanza virtuale disattivava erroneamente l'elaborazione delle annotazioni incrementali nelle versioni JDK più recenti. (b/171387388)

Versione 2.2.5

Versione 2.2.5

18 marzo 2020

Viene rilasciato androidx.room:room-*:2.2.5. La versione 2.2.5 contiene questi commit.

Correzioni di bug

  • Imposta MultiInstanceInvalidationService directBootAware. Grazie a "Mygod contact-git@mygod.be" (b/148240967)
  • È stato corretto un bug che causava un arresto anomalo se veniva abilitata l'annullamento della convalida di più istanze e il database conteneva un'entità FTS. (b/148969394)
  • È stato risolto un problema durante il caricamento delle librerie native SQLite nel processore di annotazione della stanza che causava l'arresto anomalo del compilatore a causa di compilazioni parallele. (b/146217083)

Versione 2.2.4

Versione 2.2.4

19 febbraio 2020

Vengono rilasciati i seguenti elementi: androidx.room:room-common:2.2.4, androidx.room:room-compiler:2.2.4, androidx.room:room-guava:2.2.4, androidx.room:room-ktx:2.2.4, androidx.room:room-migration:2.2.4, androidx.room:room-runtime:2.2.4, androidx.room:room-rxjava2:2.2.4 e androidx.room:room-testing:2.2.4. La versione 2.2.4 contiene questi commit.

Correzioni di bug

  • Risolto un problema di sospensione delle transazioni che comportava un deadlock se la coroutine veniva annullata rapidamente prima dell'inizio effettivo della transazione. (b/148181325)
  • È stato risolto un problema a causa del quale @Generato veniva utilizzato in modo errato durante la creazione con JDK 9. (b/146538330)
  • È stato risolto un problema per cui Room generava un codice errato quando un'interfaccia DAO in Kotlin aveva una funzione concreta. (b/146825845)

Versione 2.2.3

Versione 2.2.3

18 dicembre 2019

Viene rilasciato androidx.room:room-*:2.2.3. La versione 2.2.3 contiene questi commit.

Correzioni di bug

  • È stato corretto un bug per cui Room non riusciva a convalidare un database che non era stato sottoposto a migrazione e che conteneva un hash precedente con indici nello schema. (b/139306173)

Versione 2.2.2

Versione 2.2.2

20 novembre 2019

Viene rilasciato androidx.room:room-*:2.2.2. La versione 2.2.2 contiene questi commit.

Correzioni di bug

  • È stato corretto un bug per cui la raccolta di una relazione one-to-one con più di 999 righe causava la restituzione di elementi correlati nulli da parte di Room. (b/143105450)

Versione 2.2.1

Versione 2.2.1

23 ottobre 2019

Viene rilasciato androidx.room:room-*:2.2.1. La versione 2.2.1 contiene questi commit.

Correzioni di bug

  • È stato corretto un bug per cui la stanza virtuale visualizzava erroneamente un avviso su CURSOR_MISMATCH con l'opzione di compilazione expandProjection attivata. (b/140759491)
  • È stato aggiunto un meccanismo di ripetizione per la gestione della libreria nativa mancante utilizzata per verificare le query durante il tempo di compilazione.

Versione 2.2.0

Versione 2.2.0

9 ottobre 2019

Viene rilasciato androidx.room:room-*:2.2.0. La versione 2.2.0 contiene questi commit.

Modifiche importanti dalla versione 2.1.0

  • Database predefinito: ora sono disponibili due nuove API in RoomDatabase.Builder disponibile per la creazione di un RoomDatabase dato un database già compilato . createFromAsset() si utilizza quando il file di database precompilato si trova in nella cartella delle risorse dell'APK, mentre createFromFile() indica quando il file viene in una posizione arbitraria. L'utilizzo di queste API modifica il comportamento distruttive, in modo che durante una migrazione di riserva, Room proverà a ricopiare il database precompilato, se disponibile, altrimenti utilizza il fallback rilasciando e ricreando tutte le tabelle. B/62185732
  • Valori predefiniti dello schema: ora @ColumnInfo ha una nuova proprietà defaultValue che può essere utilizzato per specificare il valore predefinito di una colonna. I valori predefiniti sono parte di uno schema di database e verrà convalidata durante le migrazioni specificato. B/64088772
  • Relazioni di molti tipi: ora @Relation ha una nuova proprietà associateBy, che accetta una nuova annotazione @Junction, utilizzata per dichiarare una relazione deve essere soddisfatto tramite una tabella di giunzione (nota anche come tabella di join). b/69201917
  • Relazioni one-to-one: la limitazione nei campi POJO annotati con @Relation di tipo List o Set è stato rimosso, efficacemente consentendo la rappresentazione delle relazioni con un singolo valore. b/62905145
  • Entità di destinazione: le annnotazioni DAO @Insert, @Update e @Delete ora ha una nuova proprietà targetEntity, che consente di specificare la tabella di destinazione Lo scopo del metodo DAO è intervenire. In questo modo, i parametri di questi DAO essere POJO arbitrari che verranno interpretati come entità parziali. In pratica, ciò consente inserimenti, eliminazioni e aggiornamenti parziali. B/127549506
  • Flusso di coroutine: @Query i metodi DAO ora possono essere di tipo restituito Flow<T>. Il flusso restituito emetterà nuovamente un nuovo insieme di valori se le tabelle di osservazione in la query viene invalidata. Dichiarazione di una funzione DAO con ritorno Channel<T> è un errore. Stanza invece ti incoraggia a usare Flow e poi funzioni vicine per convertire Flow in Channel. B/130428884
  • Processore di annotazioni incrementali Gradle: la stanza virtuale è ora un elemento di isolamento Gradle il processore di annotazione e l'incrementalità possono essere abilitati l'opzione room.incremental. Consulta: Opzioni del compilatore della stanza per ulteriori informazioni. In caso di problemi, invia una qui. Prevediamo di attivare l'incrementalità per impostazione predefinita in una versione stabile e futura. B/112110217
  • Espansione delle proiezioni: una nuova opzione sperimentale per il compilatore È stato aggiunto room.expandProjection che fa sì che la stanza virtuale riscrivi una query con una proiezione a stella che contenga solo le colonne nel tipo restituito POJO. Per Ad esempio, per un metodo DAO con @Query("SELECT * FROM Song") che restituisce un POJO denominato SongIdAndTitle con solo due campi. A questo punto, Room riscriverà eseguire la query su SELECT id, title FROM Song in modo che l'insieme minimo di colonne per soddisfare il tipo restituito. Questo elimina essenzialmente CURSOR_MISMATCH avviso che viene visualizzato quando la query restituisce contenuti extra colonne che non corrispondono ad alcun campo nel tipo POJO di ritorno.

Versione 2.2.0-rc01

5 settembre 2019

Viene rilasciato androidx.room:room:2.2.0-rc01. I commit inclusi in questa versione sono disponibili qui.

Nessuna modifica pubblica dalla stanza 2.2.0-beta01.

Versione 2.2.0-beta01

22 agosto 2019

Viene rilasciato androidx.room:room-*:2.2.0-beta01. I commit inclusi in questa versione sono disponibili qui.

Correzioni di bug

  • È stato corretto un bug per cui una query Coroutine Flow interrompeva la restituzione di nuovi valori dopo un determinato periodo di tempo. (b/139175786)
  • È stato corretto un bug per cui Room non accettava un codice hash dello schema precedente durante l'apertura di un database che non era stato eseguito dalla stanza 1.0 e causava un arresto anomalo di runtime a causa di uno schema non valido. (b/139306173)

Versione 2.2.0-alpha02

7 agosto 2019

Viene rilasciato androidx.room:room-*:2.2.0-alpha02. I commit inclusi in questa versione sono disponibili qui.

Nuove funzionalità

  • Flusso di coroutine: @Query i metodi DAO ora possono essere di tipo restituito Flow<T>. Il flusso restituito emetterà nuovamente un nuovo insieme di valori se le tabelle di osservazione in la query viene invalidata. Dichiarazione di una funzione DAO con ritorno Channel<T> è un errore. Stanza invece ti incoraggia a usare Flow e poi funzioni vicine per convertire Flow in Channel. B/130428884
  • Espansione delle proiezioni: una nuova opzione sperimentale per il compilatore È stato aggiunto room.expandProjection che fa sì che la stanza virtuale riscrivi una query con una proiezione a stella che contenga solo le colonne nel tipo restituito POJO. Per Ad esempio, per un metodo DAO con @Query("SELECT * FROM Song") che restituisce un POJO denominato SongIdAndTitle con solo due campi. A questo punto, Room riscriverà eseguire la query su SELECT id, title FROM Song in modo che l'insieme minimo di colonne per soddisfare il tipo restituito. Questo elimina essenzialmente CURSOR_MISMATCH avviso che viene visualizzato quando la query restituisce contenuti extra colonne che non corrispondono ad alcun campo nel tipo POJO di ritorno.
  • onDestructiveMigrate è una nuova API callback aggiunta a RoomDatabase.Callback per i casi in cui Room esegue la migrazione distruttiva di un database. B/79962330

Correzioni di bug

  • È stato corretto un bug per cui Room generava un codice errato utilizzando un metodo come campo setter quando il campo è protetto. B/136194628
  • È stato corretto un bug che causava la generazione di un NPE da parte di InvalidationTracker Processo quando l'annullamento della convalida di più istanze è stato abilitato e l'annullamento Il servizio è stato interrotto. B/137454915
  • È stato corretto un bug per cui la stanza virtuale non identificava correttamente il tipo restituito di un funzione di sospensione ereditata annotata con @RawQuery. B/137878827
  • Aggiornamento del codice generato per @Relation quando la chiave correlata è di tipo BLOB per utilizzare un ByteBuffer paragonabile. B/137881998
  • È stato corretto un bug per cui la stanza virtuale si lamentava della mancanza dei setter sui POJO utilizzati come parametri entità parziali di @Insert, @Update e @Delete. B/138664463
  • È stato corretto un bug per cui la stanza virtuale si lamentava della mancanza di getter e setter per colonna ignorata tramite @Entity quando la classe entità è stata utilizzata in un determinato DAO di classificazione. b/138238182
  • È stato corretto un bug per cui la stanza virtuale non convertiva correttamente gli argomenti di associazione denominati in argomenti posizionali che causano un'eccezione di runtime durante l'esecuzione di una query con parametri riutilizzati. B/137254857

Versione 2.2.0-alpha01

10 luglio 2019

Nuove funzionalità

  • Database predefinito: ora sono disponibili due nuove API in RoomDatabase.Builder disponibile per la creazione di un RoomDatabase dato un database già compilato . createFromAsset() si utilizza quando il file di database precompilato si trova in nella cartella delle risorse dell'APK, mentre createFromFile() indica quando il file viene in una posizione arbitraria. L'utilizzo di queste API modifica il comportamento distruttive, in modo che durante una migrazione di riserva, Room proverà a ricopiare il database precompilato, se disponibile, altrimenti utilizza il fallback rilasciando e ricreando tutte le tabelle. B/62185732
  • Valori predefiniti dello schema: ora @ColumnInfo ha una nuova proprietà defaultValue che può essere utilizzato per specificare il valore predefinito di una colonna. I valori predefiniti sono parte di uno schema di database e verrà convalidata durante le migrazioni specificato. B/64088772

    Nota: se lo schema del database include già lo schema predefinito come quelli aggiunti tramite ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z e decidi di definire valori predefiniti tramite @ColumnInfo nel stesse colonne, potresti dover eseguire una migrazione per convalidare valori predefiniti non considerati. Consulta: Migrazioni delle stanze per ulteriori informazioni.

  • Relazioni di molti tipi: ora @Relation ha una nuova proprietà associateBy, che accetta una nuova annotazione @Junction, utilizzata per dichiarare una relazione deve essere soddisfatto tramite una tabella di giunzione (nota anche come tabella di join). b/69201917
  • Relazioni one-to-one: la limitazione nei campi POJO annotati con @Relation di tipo List o Set è stato rimosso, efficacemente consentendo la rappresentazione delle relazioni con un singolo valore. b/62905145
  • Entità di destinazione: le annnotazioni DAO @Insert, @Update e @Delete ora ha una nuova proprietà targetEntity, che consente di specificare la tabella di destinazione Lo scopo del metodo DAO è intervenire. In questo modo, i parametri di questi DAO essere POJO arbitrari che verranno interpretati come entità parziali. In pratica, ciò consente inserimenti, eliminazioni e aggiornamenti parziali. B/127549506
  • Processore di annotazioni incrementali Gradle: la stanza virtuale è ora un elemento di isolamento Gradle il processore di annotazione e l'incrementalità possono essere abilitati l'opzione room.incremental. Consulta: Opzioni del compilatore della stanza per ulteriori informazioni. In caso di problemi, invia una qui. Prevediamo di attivare l'incrementalità per impostazione predefinita in una versione stabile e futura. B/112110217

Correzioni di bug

  • La stanza non propagherà più EmptySetResultException al gestore degli errori globale quando il flusso Rx di una query è stato eliminato in precedenza se la query viene completata. b/130257475
  • È stato corretto un bug per cui la stanza virtuale mostrava un messaggio di errore errato quando una sospensione La funzione DAO annotata con @RawQuery non aveva un tipo restituito. b/134303897
  • Room non genererà più adattatori DAO con tipi non elaborati. B/135747255

Versione 2.1.0

Versione 2.1.0

13 giugno 2019

La stanza 2.1.0 viene rilasciata senza modifiche a partire dal giorno 2.1.0-rc01. I commit inclusi nella versione sono disponibili qui.

Modifiche importanti dalla versione 2.0.0

  • FTS: la stanza virtuale ora supporta le entità con una mappatura Tabella FTS3 o FTS4. Classi con annotazioni Ora @Entity può essere ulteriormente annotato con @Fts3 o @Fts4 una classe con una tabella di ricerca di ricerca a testo intero di mappatura. FTS per ulteriori informazioni sono disponibili tramite i metodi dell'annotazione.
  • Visualizzazioni: la stanza virtuale ora supporta la dichiarazione di una classe come query archiviata, nota anche come vista, utilizzando @DatabaseView.
  • Couroutine: i metodi DAO ora possono essere funzioni di sospensione. Includi room-ktx nelle tue dipendenze per sfruttare questa funzionalità. L'artefatto ktx offre anche la funzione di estensione RoomDatabase.withTransaction per l'esecuzione di transazioni di database all'interno di una coroutine.
  • Valore automatico: la stanza ora supporta la dichiarazione Valore automatico come entità e POJO. Le annotazioni della stanza @PrimaryKey, Ora @ColumnInfo, @Embedded e @Relation possono essere dichiarati in un i metodi astratti delle classi con valore annotato. Tieni presente che anche questa annotazione deve essere accompagnati da @CopyAnnotations affinché la stanza virtuale possa comprenderli correttamente.
  • Ulteriore supporto asincrono: metodi DAO annotati con @Insert, @Delete o @Update, insieme a @Query contenente INSERT, DELETE o UPDATE ora supportano i tipi di restituzione Rx Completable, Single, Maybe, e il tipo restituito di Guava ListenableFuture. Inoltre, possono essere sospesi funzioni.
  • enableMultiInstanceInvalidation è una nuova API in RoomDatabase.Builder per abilitare l'annullamento della convalida su più istanze di RoomDatabase utilizzando lo stesso in un file di database.
  • fallbackToDestructiveMigrationOnDowngrade è una nuova API in RoomDatabase.Builder per ricreare automaticamente il database in caso di downgrade .
  • ignoredColumns è una nuova API nell'annotazione @Entity che può essere utilizzata per elenca i campi ignorati per nome.
  • La stanza virtuale utilizzerà correttamente il costruttore principale di Kotlin nelle classi di dati evitando di dichiarare le proprietà come vars.

Versione 2.1.0-rc01

29 maggio 2019

Correzioni di bug

  • Risolto un errore di inizializzazione della stanza che poteva verificarsi a causa di una configurazione già configurazione temp_store. B/132602198
  • È stato corretto un avviso di utilizzo delle virgolette doppie per gli utenti con SQLite 3.27.0 e versioni successive. B/131712640
  • È stato corretto un bug per cui InvalidationTracker causava un arresto anomalo quando più i controlli di annullamento della convalida vengono eseguiti in parallelo. B/133457594

Versione 2.1.0-beta01

7 maggio 2019

androidx.room 2.1.0-beta01 viene rilasciato senza modifiche dalla versione 2.1.0-alpha07. I commit inclusi in questa versione sono disponibili qui.

Versione 2.1.0-alpha07

25 aprile 2019

Modifiche al comportamento / API

  • La funzione di estensione RoomDatabase.withTransaction è stata modificata in non utilizzare più un blocco funzione con un CoroutineScope come ricevitore. In questo modo si evita di saltare il wrapper coroutineScope { } aggiuntivo necessario per eseguire contemporaneamente elementi nel blocco Transaction.

Correzioni di bug

  • È stato corretto un bug per cui la stanza non corrispondeva a un TypeConverter per un DAO Kotlin contenente un parametro del tipo di raccolta. B/122066791

Versione 2.1.0-alpha06

22 marzo 2019

Modifiche al comportamento / API

  • Le query sulle transazioni asincrone ora sono serializzate in modo che la stanza non utilizzi più di un thread per l'esecuzione di transazioni di database. RoomDatabase.Builder.setTransactionExecutor(Executor) è stato aggiunto per consentire e configurare l'esecutore per le transazioni.
  • La casella di controllo di RoomDatabase.runInTransaction(Callable) non sarà più selezionata in RuntimeEccezioni. b/128623748

Correzioni di bug

  • È stato corretto un bug per cui il tracker di invalidazione smetteva di osservare un contenuto se osservatori sia per la tabella dei contenuti sia per un FTS di contenuti esterni . B/128508917
  • Aggiornata la grammatica SQLite di Room per corrispondere a SQLite 3.24.0. B/110883668

Versione 2.1.0-alpha05

13 marzo 2019

Nuove funzionalità

  • La funzione di estensione RoomDatabase.withTransaction consente di eseguire in sicurezza transazioni di database all'interno di una coroutine. Le funzioni delle estensioni della stanza, insieme al supporto delle coroutine, sono disponibili nell'elemento room-ktx.
  • I metodi DAO non astratti annotati con @Transaction ora possono essere funzioni di sospensione. b/120241587

Modifiche al comportamento / API

  • L'elemento room-coroutines è stato rinominato in room-ktx seguendo la stessa denominazione degli altri elementi Androidx.
  • beginTransaction, setTransactionSuccessful e endTransaction in RoomDatabase sono stati deprecati a favore di runInTransaction e della funzione di estensione room-ktx withTransaction.

Correzioni di bug

  • È stato corretto un bug per cui gli argomenti del tokenizzatore venivano eliminati se il tokenizzatore utilizzato era SEMPLICE. B/125427014
  • È stato corretto un bug per cui la stanza virtuale non identificava correttamente le funzioni di sospensione con parametri di tipo una classe interna. B/123767877
  • È stato corretto un bug per cui il metodo DAO @Query differito con istruzioni INSERT, UPDATE o DELETE stava preparando con entusiasmo la query nel thread principale. b/123695593
  • Sono stati corretti vari bug per cui Room generava un codice errato per alcune funzioni di sospensione. b/123466702 e b/123457323
  • È stato corretto un bug per cui l'utilizzo deprecato dei metodi non veniva correttamente soppresso nel codice generato. B/117602586
  • Dipendenza stanza aggiornata di androidx.sqlite alla versione 1.0.2, che contiene correzioni per la gestione corretta dei database danneggiati. B/124476912

Problemi noti

  • La stanza 2.1.0-alpha05 dipende dall'artefatto kotlinx-metadata-jvm che non è attualmente disponibile in Maven Central (KT-27991). Questa dipendenza può essere risolta aggiungendo maven { url "https://kotlin.bintray.com/kotlinx/" } ai repository del tuo progetto.

Versione 2.1.0-alpha04

25 gennaio 2019

Nuove funzionalità

  • I metodi DAO annotati con @Query contenenti istruzioni INSERT, UPDATE o DELETE ora possono restituire tipi asincroni Single, Mayble, Completable e ListenableFuture. Possono anche essere funzioni di sospensione. B/120227284

Modifiche al comportamento / API

  • La stanza virtuale restituirà un errore se un metodo DAO non astratto annotato con @Transaction restituisce un tipo asincrono, ad esempio Single, Mayble, Completable, LiveData o ListenableFuture. Poiché le transazioni sono confinate nei thread, attualmente è impossibile per le stanze virtuali iniziare e terminare una transazione relativa a una funzione che può eseguire query in thread diversi. B/120109336
  • OnConflictStrategy.FAIL e OnConflictStrategy.ROLLBACK sono stati @Deprecated perché non si comportano come previsto con le attuali associazioni SQLite di Android. b/117266738

Correzioni di bug

  • È stato corretto un bug per cui Room non utilizzava correttamente il TypeConverter di un tipo restituito se il metodo DAO era una funzione di sospensione. B/122988159
  • È stato corretto un bug per cui la stanza virtuale identificava erroneamente le funzioni di sospensione ereditate come non in sospeso. B/122902595
  • È stato corretto un bug per cui la stanza virtuale generava un codice errato quando un campo @Embedded era in una classe principale e veniva utilizzato in più corsi secondari. b/121099048
  • Risolto un problema per cui il database si bloccava durante la chiamata a funzioni di sospensione DAO tra beginTransaction() e endTransaction(). B/120854786

Versione 2.1.0-alpha03

4 dicembre 2018

Modifiche alle API

  • L'FTS tokenizer in @Fts3/@Fts4 ora prende una stringa anziché un'enum. Ciò consente l’utilizzo di tokenizzatori personalizzati da parte delle stanze. I tokenizzatori integrati sono ancora definiti in FtsOptions come costanti stringa. b/119234881

Nuove funzionalità

  • Couroutine: i metodi DAO ora possono essere funzioni di sospensione. Per supportare le funzioni di sospensione nella stanza virtuale, è stato rilasciato un nuovo artefatto, room-coroutines. B/69474692
  • I metodi DAO annotati con @Insert, @Delete o @Update ora supportano ListenableFuture come tipo restituito. b/119418331

Correzioni di bug

  • È stato corretto un bug per cui la stanza virtuale cercava erroneamente di trovare un costruttore con colonne nella proprietà ignoredColumns di @Entity. B/119830714
  • È stato corretto un bug per cui Room non contrassegnava i parametri del metodo DAO come definitivi nell'implementazione generata. B/118015483
  • È stato corretto un bug per cui il processore della stanza si arrestava in modo anomalo se veniva segnalato un errore relativo a una query con simboli speciali. B/119520136
  • È stato corretto un bug per cui Room avrebbe rifiutato altre varie implementazioni di Collection come argomenti di un'espressione IN. B/119884035
  • È stato corretto un bug per cui i LiveData restituiti dalla stanza avrebbero ricevuto la garbage collection quando osservati per sempre, causando l'interruzione dell'emissione di nuovi dati. B/74477406
  • Blocco di RoomDatabase aggiornato per ridurne il conflitto. b/117900450

Versione 2.1.0-alpha02

30 ottobre 2018

Nuove funzionalità

  • È stato aggiunto il supporto per fare riferimento a @DatabaseView in un @Relation. B/117680932

Correzioni di bug

  • È stato corretto un bug per cui Room eseguiva l'I/O del disco nel thread principale durante la sottoscrizione e l'eliminazione da un tipo restituito Rx. B/117201279
  • È stato corretto un bug per cui la stanza virtuale non riusciva a trovare un convertitore dei tipi appropriato per un campo in una classe di entità Kotlin. B/111404868
  • È stato corretto un bug per cui Room generava codice errato per un'implementazione dell'interfaccia DAO contenente un metodo predefinito Kotlin senza argomenti. b/117527454
  • Aggiornamento del parser grammaticale SQLite di Room, in modo da risolvere un problema di prestazioni che causava tempi di compilazione lunghi. B/117401230

Versione 2.1.0-alpha01

8 ottobre 2018

Nuove funzionalità

  • FTS: la stanza virtuale ora supporta le entità con una tabella FTS3 o FTS4 di mappatura. Ora le classi annotate con @Entity possono essere ulteriormente annotate con @Fts3 o @Fts4 per dichiarare una classe con una tabella di ricerca a testo intero di mappatura. Le opzioni FTS per un'ulteriore personalizzazione sono disponibili tramite i metodi dell'annotazione. B/62356416
  • Visualizzazioni: la stanza virtuale ora supporta la dichiarazione di una classe come query archiviata, nota anche come vista, mediante l'annotazione @DatabaseView. B/67033276
  • Valore automatico: la stanza virtuale ora supporta la dichiarazione delle classi annotate con Valore automatico come entità e POJO. Ora le annotazioni delle stanze @PrimaryKey, @ColumnInfo, @Embedded e @Relation possono essere dichiarate nei metodi astratti di una classe annotata con valori automatici. Tieni presente che queste annotazioni devono anche essere accompagnate da @CopyAnnotations affinché la stanza virtuale possa interpretarle correttamente. b/62408420
  • Supporto aggiuntivo per i tipi di reso Rx: i metodi DAO annotati con @Insert, @Delete o @Update ora supportano i tipi restituiti Rx Completable, Single<T> e Maybe<T>. B/63317956
  • Tipi immutabili con @Relation: in precedenza, la stanza virtuale richiedeva che i campi annotati @Relation fossero configurabili, ma ora possono essere parametri del costruttore.
  • enableMultiInstanceInvalidation: è una nuova API in RoomDatabase.Builder che consente l'annullamento della convalida in più istanze di RoomDatabase utilizzando lo stesso file di database. Questo meccanismo di invalidazione di più istanze funziona anche su più processi. B/62334005
  • fallbackToDestructiveMigrationOnDowngrade: è una nuova API in RoomDatabase.Builder che ricrea automaticamente il database in caso di downgrade. B/110416954
  • ignoredColumns: è una nuova API nell'annotazione @Entity che può essere utilizzata per elencare i campi ignorati per nome. Utile per ignorare i campi ereditati su un'entità. B/63522075

Modifiche al comportamento / API

  • mCallback e mDatabase in RoomDatabase adesso sono @Deprecated e verranno rimossi nella prossima versione principale di Stanza virtuale. b/76109329

Correzioni di bug

  • Sono stati risolti due problemi per cui la stanza virtuale non veniva recuperata correttamente da un database danneggiato o da una migrazione errata durante l'inizializzazione. b/111504749 e b/111519144
  • Ora Room utilizzerà correttamente il costruttore principale di Kotlin nelle classi di dati, evitando di dichiarare i campi come vars. B/105769985

Versione 2.0.0

Versione 2.0.0

1° ottobre 2018

androidx.room 2.0.0 viene rilasciato senza modifiche dalla versione 2.0.0-rc01.

Versione 2.0.0-rc01

20 settembre 2018

androidx.room 2.0.0-rc01 viene rilasciato senza modifiche dalla versione 2.0.0-beta01.

Versione 2.0.0-beta01

2 luglio 2018

Modifiche al comportamento / API

  • È stato aggiunto RoomDatabase.Builder.setQueryExecutor() per consentire la personalizzazione della posizione in cui vengono eseguite le query
  • Aggiunto il supporto RxJava2 Observable
  • Le implementazioni DAO e database generate sono ora definitive

Correzioni di bug

  • Specifica il nome della classe/del campo in "impossibile trovare il getter per il campo" errore b/73334503
  • È stata corretta la compatibilità con le versioni precedenti di RoomOpenHelper con le versioni precedenti della stanza b/110197391

Dipendenze precedenti ad AndroidX

Per le versioni precedenti ad AndroidX di Room, includi queste dipendenze:

dependencies {
    def room_version = "1.1.1"

    implementation "android.arch.persistence.room:runtime:$room_version"
    annotationProcessor "android.arch.persistence.room:compiler:$room_version" // For Kotlin use kapt instead of annotationProcessor

    // optional - RxJava support for Room
    implementation "android.arch.persistence.room:rxjava2:$room_version"

    // optional - Guava support for Room, including Optional and ListenableFuture
    implementation "android.arch.persistence.room:guava:$room_version"

    // Test helpers
    testImplementation "android.arch.persistence.room:testing:$room_version"
}

Versione 1.1.1

Versione 1.1.1

19 giugno 2018

La stanza 1.1.1 è identica alla stanza 1.1.1-rc1.

Versione 1.1.1-rc1

16 maggio 2018 Abbiamo moltissimo consiglia di utilizzare la stanza 1.1.1-rc1 anziché 1.1.0 se utilizzi le migrazioni.

È stato corretto un bug per cui la stanza virtuale non gestiva correttamente l'inizializzazione successiva alla migrazione b/79362399

Versione 1.1.0

Versione 1.1.0-beta3

19 aprile 2018

Correzioni di bug

  • Correggi l'errore di compilazione quando un POJO Kotlin fa riferimento a un'entità di relazione che è stato definito in Java b/78199923

Versione 1.1.0-beta2

5 aprile 2018

Correzioni di bug

  • È stato corretto un bug critico nelle implementazioni Rx Single e Maybe della stanza in cui ricicla la query in anticipo, causando problemi se ne aggiungi più di una osservatore alle istanze Single o Maybe restituite. B/76031240

  • [RoomDatabase.clearAllTables][ref-clearAllTables] non VACUUM il database se viene chiamato in una transazione. b/77235565

Versione 1.1.0-beta1

21 marzo 2018

Modifiche alle API

  • In base al feedback della revisione dell'API, @RawQuery non accetta più di trasmettere String come parametro di query. Devi usare [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (vedi [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] per creare facilmente un'istanza di [SupportSQLiteQuery][ref-SupportSQLiteQuery] con supporto per argomenti).
  • Il metodo [fallbackToDestructiveMigrationFrom][ref-fallbackToDestructiveMigrationFrom] di RoomDatabase.Builder ora accetta vararg int anziché vararg Integer.

Correzioni di bug

  • [RoomDatabase.clearAllTables][ref-clearAllTables] ora tenta di restituire lo spazio al sistema operativo impostando un checkpoint WAL ed VACUUMingendo il database.
  • [@RawQuery][ref-RawQuery] ora accetta qualsiasi Pojo per la proprietà observedEntities, purché il Pojo faccia riferimento a una o più entità tramite i relativi campi Embedded o Relation. b/74041772
  • Paging: l'implementazione DataSource di Room ora gestisce correttamente le dipendenze multi-tabella (come relazioni e join). In precedenza, questi ultimi non attivavano nuovi risultati o non venivano compilati. B/74128314

Versione 1.1.0-alpha1

22 gennaio 2018

Nuove funzionalità

  • RawQuery: questa nuova API consente ai metodi @Dao di ricevere il codice SQL come parametro di query b/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom: questa nuova API in RoomDatabase.Builder consente controllo granulare su cui vengono eseguite le migrazioni distruttive delle versioni iniziali dello schema. consentito (rispetto a fallbackToDestructiveMigration) B/64989640
  • Ora Room supporta solo le API di paging più recenti (alpha-4+), eliminando il supporto per le API deprecate LivePagedListProvider. Per usare la nuova versione alpha della stanza virtuale, dovrai usare il paging alpha-4 o superiore e passa da LivePagedListProvider a LivePagedListBuilder se non l'hai ancora fatto.

Correzioni di bug

  • Supporto migliorato per i tipi Kotlin Kapt. B/69164099
  • L'ordine dei campi non invalida più lo schema. B/64290754