Room

La libreria di persistenza della stanza fornisce un livello di astrazione rispetto a SQLite per consentire un accesso più solido al database, sfruttando al contempo tutta la potenza di SQLite.
Aggiornamento più recente Release stabile Candidato per l'uscita Versione beta Release alpha
10 luglio 2024 2.6.1 - - 2.7.0-alpha05

Dichiarazione delle dipendenze

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

Le dipendenze per le stanze virtuali includono il test delle migrazioni delle stanze e Room RxJava

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

Alla moda

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 (ovvero i moduli Gradle solo Java o Kotlin) puoi dipendere da androidx.room:room-common per utilizzare le annotazioni delle stanze.

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 nella directory specificata. Per ulteriori informazioni, consulta Migrazioni delle stanze.
room.incremental boolean
Abilita il processore di annotazione incrementale Gradle. Il valore predefinito è true.
room.generateKotlin boolean
Genera file di origine 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 2.6.0 e versioni successive, puoi utilizzare il plug-in Room Gradle per configurare le opzioni per il compilatore Room. Il plug-in configura il progetto in modo che gli schemi generati (che sono un output delle attività di compilazione e vengono utilizzati per le migrazioni automatiche) siano configurati correttamente per avere build riproducibili e memorizzabili nella cache.

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

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 utilizza l'estensione 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. In questo modo verranno configurati il compilatore Room e le varie attività di compilazione e i relativi backend (javac, KAPT, KSP) per generare i file di schema in cartelle personalizzate, ad esempio schemas/flavorOneDebug/com.package.MyDatabase/1.json. Questi file devono essere archiviati nel repository per essere utilizzati per la convalida e le migrazioni automatiche.

Alcune opzioni non possono essere configurate in tutte le versioni del plug-in per Room Gradle, anche se sono supportate dal compilatore Room. La tabella seguente elenca ogni opzione e mostra la versione del plug-in Room Gradle che ha aggiunto il supporto per la configurazione dell'opzione utilizzando l'estensione room. Se la tua versione è precedente o se l'opzione non è ancora supportata, puoi utilizzare le 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 è supportata dalla tua versione del plug-in, puoi configurare Room utilizzando le opzioni del processore di annotazione, come descritto in Aggiungere dipendenze build. Il modo in cui specifica le opzioni di annotazione dipende dall'uso o meno di KSP o KAPT per Room.

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 Gradle sia a conoscenza di questa directory quando esegue controlli aggiornati. Esegui 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. Facci sapere se scopri nuovi problemi o hai idee per migliorare questa raccolta. Dai un'occhiata ai problemi esistenti in questa libreria prima di crearne uno nuovo. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a stella.

Crea un nuovo numero

Per ulteriori informazioni, consulta la documentazione di Issue Tracker.

Versione 2.7

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 callback 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 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 e 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 potrebbero verificarsi 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) {6815/9}

    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 avrà bisogno del suffisso ".Companion" per accedere 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 dell'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

  • Aggiunto il supporto per le proprietà interne nelle origini Kotlin. Si tratta di un leggero cambiamento del comportamento nella stanza virtuale in cui verrà utilizzato il nome di origine delle funzioni abbinandole alle proprietà come getter/setter (in precedenza, utilizzava il nome JVM della funzione, che era diverso per le funzioni/proprietà interne). Se utilizzi annotazioni @JvmName personalizzate per abbinare getter/setter a proprietà private, controlla attentamente il codice generato dopo l'aggiornamento (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

  • Aggiunto il supporto per le proprietà interne nelle origini Kotlin. Si tratta di un leggero cambiamento del comportamento nella stanza virtuale in cui verrà utilizzato il nome di origine delle funzioni abbinandole alle proprietà come getter/setter (in precedenza, utilizzava il nome JVM della funzione, che era diverso per le funzioni/proprietà interne). Se utilizzi annotazioni @JvmName personalizzate per abbinare getter/setter a proprietà private, controlla attentamente il codice generato dopo l'aggiornamento (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 prende in considerazione le informazioni sui valori null nei tipi. Poiché queste informazioni sono disponibili solo nel punto di forza principale, sono attive per impostazione predefinita solo nel punto di forza principale. Se causa problemi, puoi disattivarlo passando room.useNullAwareTypeAnalysis=false al processore di annotazione. In questo caso, segnala un bug poiché questo flag verrà rimosso in futuro. Con questo nuovo analizzatore TypeConverter, ti consigliamo di fornire solo TypeConverter che ricevono non null, in quanto il nuovo analizzatore ha la possibilità di aggregarli con un controllo nullo. Tieni presente che questo non ha alcun impatto per gli utenti che utilizzano KAPT o Java come processori di annotazione (a differenza di KSP). I tipi non contengono informazioni sui valori nulli. (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 con 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 PagingSource generata da room-paging ora utilizza l'elemento queryExecutor trasmesso tramite RoomDatabase.Builder, quindi è possibile eseguirne l'override, 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 multimap non venivano ordinati correttamente 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 questo cambiamento 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 extra 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

  • Ora la stanza virtuale utilizzerà per impostazione predefinita beginTransactionNonExclusive se la modalità WAL è abilitata e l'API ha almeno 16 anni. 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

  • Aggiorna la documentazione TypeConverters per chiarire che TypeConverters può essere utilizzato solo per convertire colonne / campi e non 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 la copia di un database predefinito. (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: in RoomDatabase.Builder sono ora disponibili due nuove API per la creazione di un RoomDatabase in base a un file di database già compilato. createFromAsset() è quando il file di database precompilato si trova nella cartella degli asset dell'APK, mentre createFromFile() è quando il file si trova in una posizione arbitraria. L'utilizzo di queste API modifica il comportamento delle migrazioni distruttive, pertanto durante una migrazione di riserva, Room proverà a ricopiare il database precompilato, se disponibile, altrimenti scaricherà e ricrea tutte le tabelle. b/62185732
  • Valori predefiniti dello schema: @ColumnInfo ora ha una nuova proprietà defaultValue che può essere utilizzata per specificare il valore predefinito di una colonna. I valori predefiniti fanno parte di uno schema di database e, se specificati, verranno convalidati durante le migrazioni. b/64088772
  • Relazioni più richieste: ora @Relation ha una nuova proprietà associateBy, che accetta una nuova annotazione @Junction, utilizzata per dichiarare una relazione che deve essere soddisfatta 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 come di tipo List o Set è stata rimossa, consentendo di fatto la rappresentazione delle relazioni a un singolo valore. b/62905145
  • Entità target: le annnotazioni DAO @Insert, @Update e @Delete ora hanno una nuova proprietà targetEntity, che consente di specificare la tabella di destinazione su cui deve agire il metodo DAO. Ciò consente ai parametri di questi metodi DAO di 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 set di valori se le tabelle di osservazione nella query vengono invalidate. Dichiarare una funzione DAO con un tipo restituito Channel<T> è un errore. Room ti incoraggia invece a utilizzare Flow e a usare le funzioni di vicinanza per convertire Flow in Channel. B/130428884
  • Processore di annotazioni incrementali di Gradle: la stanza virtuale è ora un processore di annotazione con isolamento di Gradle, ed è possibile abilitare l'incremento tramite l'opzione del processore room.incremental. Per ulteriori informazioni, vedi Opzioni del compilatore delle stanze. In caso di problemi, segnala un bug qui. Prevediamo di abilitare l'incrementalità per impostazione predefinita in una versione stabile futura. b/112110217
  • Espansione delle proiezioni: è stata aggiunta una nuova opzione sperimentale del compilatore room.expandProjection che consente a Room di riscrivere una query con una proiezione a stella in modo da contenere solo le colonne nel POJO di tipo restituito. Ad esempio, per un metodo DAO con @Query("SELECT * FROM Song") che restituisce un POJO denominato SongIdAndTitle con solo due campi. Room riscriverà la query in SELECT id, title FROM Song in modo che venga recuperato l'insieme minimo di colonne per soddisfare il tipo restituito. Sostanzialmente, elimina l'avviso CURSOR_MISMATCH che viene presentato quando la query restituisce colonne aggiuntive che non corrispondono a nessun campo nel tipo POJO che restituisce.

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 set di valori se le tabelle di osservazione nella query vengono invalidate. Dichiarare una funzione DAO con un tipo restituito Channel<T> è un errore. Room ti incoraggia invece a utilizzare Flow e a usare le funzioni di vicinanza per convertire Flow in Channel. B/130428884
  • Espansione delle proiezioni: è stata aggiunta una nuova opzione sperimentale del compilatore room.expandProjection che consente a Room di riscrivere una query con una proiezione a stella in modo da contenere solo le colonne nel POJO di tipo restituito. Ad esempio, per un metodo DAO con @Query("SELECT * FROM Song") che restituisce un POJO denominato SongIdAndTitle con solo due campi. Room riscriverà la query in SELECT id, title FROM Song in modo che venga recuperato l'insieme minimo di colonne per soddisfare il tipo restituito. Sostanzialmente, elimina l'avviso CURSOR_MISMATCH che viene presentato quando la query restituisce colonne aggiuntive che non corrispondono a nessun campo nel tipo POJO che restituisce.
  • onDestructiveMigrate è una nuova API di callback aggiunta a RoomDatabase.Callback per quando 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 setter di campi quando il campo è protetto. b/136194628
  • È stato corretto un bug che causava la generazione di un NPE da parte di InvalidationTracker in un secondo processo quando l'invalidazione di più istanze veniva abilitata e il servizio di invalidazione veniva interrotto. b/137454915
  • È stato corretto un bug per cui Room non identificava correttamente il tipo restituito di una funzione di sospensione ereditata annotata con @RawQuery. B/137878827
  • È stato aggiornato il 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 di setter su POJO utilizzati come parametri di entità parziali di @Insert, @Update e @Delete. B/138664463
  • È stato corretto un bug per cui Room si lamentava della mancanza di getter e setter per una colonna ignorata tramite @Entity quando la classe entità veniva utilizzata in determinati metodi DAO. b/138238182
  • È stato corretto un bug per cui la stanza virtuale non convertiva correttamente gli argomenti di associazione denominati in argomenti posizionali causando 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: in RoomDatabase.Builder sono ora disponibili due nuove API per la creazione di un RoomDatabase in base a un file di database già compilato. createFromAsset() è quando il file di database precompilato si trova nella cartella degli asset dell'APK, mentre createFromFile() è quando il file si trova in una posizione arbitraria. L'utilizzo di queste API modifica il comportamento delle migrazioni distruttive, pertanto durante una migrazione di riserva, Room proverà a ricopiare il database precompilato, se disponibile, altrimenti scaricherà e ricrea tutte le tabelle. b/62185732
  • Valori predefiniti dello schema: @ColumnInfo ora ha una nuova proprietà defaultValue che può essere utilizzata per specificare il valore predefinito di una colonna. I valori predefiniti fanno parte di uno schema di database e, se specificati, verranno convalidati durante le migrazioni. b/64088772

    Nota: se lo schema del tuo database include già valori predefiniti, ad esempio quelli aggiunti tramite ALTER TABLE x ADD COLUMN y INTEGER NOTNULL DEFAULT z e decidi di definire valori predefiniti tramite @ColumnInfo nelle stesse colonne, potrebbe essere necessario eseguire una migrazione per convalidare i valori predefiniti non considerati. Per ulteriori informazioni, consulta Migrazioni delle stanze.

  • Relazioni più richieste: ora @Relation ha una nuova proprietà associateBy, che accetta una nuova annotazione @Junction, utilizzata per dichiarare una relazione che deve essere soddisfatta 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 come di tipo List o Set è stata rimossa, consentendo di fatto la rappresentazione delle relazioni a un singolo valore. b/62905145
  • Entità target: le annnotazioni DAO @Insert, @Update e @Delete ora hanno una nuova proprietà targetEntity, che consente di specificare la tabella di destinazione su cui deve agire il metodo DAO. Ciò consente ai parametri di questi metodi DAO di essere POJO arbitrari che verranno interpretati come entità parziali. In pratica, ciò consente inserimenti, eliminazioni e aggiornamenti parziali. b/127549506
  • Processore di annotazioni incrementali di Gradle: la stanza virtuale è ora un processore di annotazione con isolamento di Gradle, ed è possibile abilitare l'incremento tramite l'opzione del processore room.incremental. Per ulteriori informazioni, vedi Opzioni del compilatore delle stanze. In caso di problemi, segnala un bug qui. Prevediamo di abilitare l'incrementalità per impostazione predefinita in una versione stabile futura. b/112110217

Correzioni di bug

  • La stanza non propagherà più EmptySetResultException al gestore degli errori globale quando il flusso Rx di una query viene eliminato prima del completamento della query. b/130257475
  • È stato corretto un bug per cui la stanza virtuale mostrava un messaggio di errore errato quando una funzione DAO di sospensione annotata con @RawQuery non aveva un tipo restituito. b/134303897
  • La stanza 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 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 di annotazione.
  • Visualizzazioni: la stanza virtuale ora supporta la dichiarazione di una classe come query archiviata, nota anche come vista, tramite l'annotazione @DatabaseView.
  • Couroutine: i metodi DAO ora possono essere funzioni di sospensione. Includi room-ktx nelle dipendenze per sfruttare questa funzionalità. L'artefatto ktx fornisce anche la funzione di estensione RoomDatabase.withTransaction per eseguire le transazioni del database all'interno di una coroutine.
  • 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.
  • Supporto asincrono aggiuntivo: i metodi DAO annotati con @Insert, @Delete o @Update, insieme alle istruzioni @Query contenenti istruzioni INSERT, DELETE o UPDATE, ora supportano i tipi restituiti Rx Completable, Single, Maybe e il tipo restituito di Guava ListenableFuture. Possono anche essere funzioni di sospensione.
  • enableMultiInstanceInvalidation è una nuova API in RoomDatabase.Builder che consente l'annullamento della convalida in più istanze di RoomDatabase utilizzando lo stesso file di database.
  • fallbackToDestructiveMigrationOnDowngrade è una nuova API in RoomDatabase.Builder che ricrea automaticamente il database in caso di downgrade.
  • ignoredColumns è una nuova API nell'annotazione @Entity che può essere utilizzata per elencare i campi ignorati per nome.
  • Room ora utilizzerà correttamente il costruttore principale di Kotlin nelle classi di dati, evitando la necessità di dichiarare le proprietà come vars.

Versione 2.1.0-rc01

29 maggio 2019

Correzioni di bug

  • È stato corretto un errore di inizializzazione della stanza che poteva verificarsi a causa di una configurazione temp_store già impostata. 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ù controlli di invalidazione venivano 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 modo da non prendere più un blocco funzione con un CoroutineScope come ricevitore. Questo impedisce di saltare il wrapper coroutineScope { } aggiuntivo necessario per eseguire contemporaneamente gli elementi nel blocco delle transazioni.

Correzioni di bug

  • È stato corretto un bug per cui Room non corrispondeva a un TypeConverter per una funzione DAO Kotlin contenente un parametro di tipo di raccolta. b/122066791

Versione 2.1.0-alpha06

22 marzo 2019

Modifiche al comportamento / API

  • Le query di transazione asincrone ora sono serializzate in modo che la stanza virtuale non utilizzi più di un thread per eseguire le transazioni del database. È stato aggiunto RoomDatabase.Builder.setTransactionExecutor(Executor) per consentire di configurare l'esecutore da utilizzare per le transazioni.
  • RoomDatabase.runInTransaction(Callable) non aggrega più le eccezioni selezionate in RuntimeEccezioni. b/128623748

Correzioni di bug

  • È stato corretto un bug per cui il tracker di invalidazione smetteva di osservare una tabella dei contenuti se venivano aggiunti osservatori sia per la tabella dei contenuti sia per una tabella FTS dei contenuti esterni. b/128508917
  • È stata aggiornata la grammatica SQLite di Room in modo che corrisponda 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 Room non riusciva a identificare 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 preparava 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 eliminato nel codice generato. b/117602586
  • Dipendenza della stanza aggiornata di androidx.sqlite alla versione 1.0.2, che contiene correzioni per la corretta gestione 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. Inoltre, 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 tra thread, al momento è 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 Room generava un codice errato quando un campo @Embedded era in una classe padre e veniva utilizzato in più classi figlio. 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 comunque 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 si verificava un arresto anomalo del processore della stanza virtuale 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 dati LiveData restituiti dalla stanza avrebbero ricevuto la garbage collection quando osservati per sempre, con la conseguente interruzione dell'emissione di nuovi dati. b/74477406
  • Il blocco di RoomDatabase è stato 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, per la risoluzione di 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 utilizzati per le annotazioni. 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 essere accompagnate anche dal codice @CopyAnnotations affinché la stanza virtuale possa comprenderle 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 della stanza. 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 nell'errore "Impossibile trovare il getter per il campo" 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 Ti consigliamo vivamente di utilizzare la stanza 1.1.1-rc1 anziché 1.1.0 se utilizzi le migrazioni.

Risolto un bug per cui la stanza virtuale non gestiva correttamente l'inizializzazione post 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 definita 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 la query veniva riciclata anticipatamente, causando problemi se si aggiungeva più di un osservatore alle istanze Single o Maybe restituite. b/76031240

  • [RoomDatabase.clearAllTables][ref-clearAllTables] non VACUUM il database se viene chiamato all'interno di 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 multitabella (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 l'SQL come parametro di query b/62103290, b/71458963
  • fallBackToDestructiveMigrationsFrom: questa nuova API in RoomDatabase.Builder consente un controllo granulare e più fine da cui sono consentite le migrazioni distruttive delle versioni dello schema di avvio (rispetto a fallbackToDestructiveMigration) b/64989640
  • Ora Room supporta solo le API di paging più recenti (alpha-4 e versioni successive e non sarà più supportato l'LivePagedListProvider) deprecato. Per utilizzare la nuova versione alpha della stanza virtuale, devi utilizzare il paging alpha-4 o una versione successiva e, se non l'hai ancora fatto, passare da LivePagedListProvider a LivePagedListBuilder.

Correzioni di bug

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