Room

La libreria di persistenza della stanza fornisce un livello di astrazione rispetto a SQLite per consentire un accesso al database più solido, sfruttando al contempo tutta la potenza di SQLite.
Aggiornamento più recente Release stabile Candidato per la release Versione beta Release alpha
29 novembre 2023 2.6.1 - - -

Dichiarazione delle dipendenze

Per aggiungere una dipendenza alla stanza virtuale, devi aggiungere il Repository Maven di Google al tuo progetto. Per ulteriori informazioni, consulta il Repository Maven di Google.

Le dipendenze per le stanze includono migrazioni delle stanze di test e RxJava delle stanze.

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

Trendy

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'uso del plug-in KAPT, consulta la documentazione KAPT.

Per informazioni sull'utilizzo del plug-in KSP, consulta la documentazione di avvio rapido di KSP.

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

Per ulteriori informazioni sulle dipendenze, consulta Aggiungere dipendenze build.

Facoltativamente, per le librerie non Android (ovvero moduli Gradle Java o Kotlin solo per Kotlin) puoi dipendere da androidx.room:room-common per l'utilizzo delle annotazioni Room.

Configurazione delle opzioni del compilatore

La stanza virtuale ha le seguenti opzioni per il processore di annotazioni.

room.schemaLocation directory
Consente di esportare gli schemi di database in file JSON nella directory specificata. Per ulteriori informazioni, consulta Migrazioni delle stanze.
room.incremental boolean
Abilita il processore di annotazioni incrementali Gradle. Il valore predefinito è true.
room.generateKotlin boolean
Genera file sorgente Kotlin anziché Java. Richiede il principale punto di forza. Il valore predefinito è false. Per ulteriori dettagli, vedi le note sulla versione 2.6.0.

Utilizza 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 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.

trendy

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'estensione room.

trendy

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. Il compilatore Room e le varie attività di compilazione e i relativi backend verranno configurati (javac, KAPT, KSP) per l'output dei file di schema in cartelle personalizzate, ad esempio schemas/flavorOneDebug/com.package.MyDatabase/1.json. Questi file devono essere controllati 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 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 di tale 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 (obbligatorio) 2.6.0
room.incremental -
room.generateKotlin -

Utilizza le opzioni del processore di annotazioni

Se non utilizzi il plug-in Room Gradle o se l'opzione desiderata non è supportata dalla tua versione del plug-in, puoi configurare la stanza utilizzando le opzioni del processore di annotazione, come descritto in Aggiungere dipendenze build. Il modo in cui specifichi le opzioni di annotazione dipende dall'utilizzo o meno di KSP o KAPT per la camera.

trendy

// 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 usare un CommandLineArgumentsProvider quando aggiungi questa opzione in modo che Gradle sappia della 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 rilevi nuovi problemi o hai idee per migliorare la libreria. Dai un'occhiata ai problemi esistenti in questa libreria prima di crearne una nuova. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.

Crea un nuovo problema

Per ulteriori informazioni, consulta la documentazione di Issue Tracker.

Versione 2.6

Versione 2.6.1

29 novembre 2023

androidx.room:room-*:2.6.1 viene rilasciato. 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é su 0,0. È stata inclusa anche una possibile correzione per un caso limite simile per le colonne di tipo Float. (Id75f5, b/304584179)
  • Le eccezioni generate dai caricamenti di PagingSource verranno ora propagate come LoadStateUpdate di LoadResult.Error contenente il file Throwable. Questo stato di errore è osservabile tramite PagingDataAdapter.loadStateFlow(Views) o LazyPagingItems.loadState(Compose). Tieni presente che ciò contrassegna un cambiamento di comportamento in cui gli errori di caricamento precedenti appaiono come un'eccezione generata dal metodo dao che ha attivato il caricamento. (I93887, b/302708983)

Versione 2.6.0

18 ottobre 2023

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

Modifiche importanti dalla versione 2.5.0

  • L'opzione per attivare la generazione di 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 del processore per il KSP. Per ulteriori dettagli su come passare le opzioni del processore per il principale punto di forza, consulta la documentazione relativa al principale punto di forza.

Nota: quando utilizzi Kotlin CodeGen, è importante tenere presente che sono state aggiunte ulteriori 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 archiviato fisso. Un'altra limitazione aggiunta riguarda il fatto che i tipi restituiti di raccolte nullable non sono più consentiti nella stanza virtuale per Kotlin CodeGen.

Avviso:potresti notare che i tuoi progetti sono più rigidi in termini di nullità quando utilizzi Kotlin CodeGen. In Kotlin CodeGen, il valore nulla degli argomenti di tipo è importante, mentre in Java questo viene per lo più ignorato. Ad esempio, supponiamo che tu abbia un tipo di restituzione "Flow<foo\>" e che la tabella sia vuota. In Java CodeGen questo non causerà alcun problema, mentre in Kotlin CodeGen riceverai un errore. Per evitarlo, devi utilizzare "Flow<foo?\>", supponendo che venga emesso un valore null. </foo?\></foo\>

  • Il nuovo artefatto per il plug-in Room Gradle è stato aggiunto alla stanza con l'ID androidx.room, che risolve vari problemi esistenti in Room relativi alla presenza di input e output degli schemi tramite le opzioni del processore di annotazioni Gradle. Per maggiori dettagli, consulta le note di rilascio della versione 2.6.0-alpha02 delle stanze.
  • Le classi di valore nelle entità camera sono ora supportate per il principale punto di forza. (4194095)
  • I tipi di restituzione delle mappe nidificate nelle funzioni DAO ora sono supportati nella stanza virtuale. (I13f48, 203008711)

Versione 2.6.0-rc01

20 settembre 2023

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

Versione 2.6.0-beta01

23 agosto 2023

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

Correzioni di bug

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

Versione 2.6.0-alpha03

9 agosto 2023

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

Nuove funzionalità

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

Modifiche alle API

  • È stata creata una nuova annotazione di tipo denominata @MapColumn per sostituire @MapInfo, che ora è deprecata. Per ogni nome di colonna (keyColumnName, valueColumnName o entrambi) fornito in un'annotazione @MapInfo, devi dichiarare un'annotazione @MapColumn solo con columnName e utilizzare l'annotazione sull'argomento di tipo specifico a cui viene fatto riferimento (la chiave o il valore della mappa) nel tipo restituito della funzione DAO. Il motivo è che l'annotazione @MapColumn viene utilizzata direttamente sull'argomento type all'interno del tipo restituito di una funzione DAO, invece che sulla funzione stessa come @MapInfo. Per saperne di più, consulta la documentazione di @MapColumn. (Ib0305, b/203008711).
  • File API aggiornati per annotare la soppressione 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 le versioni o gli schemi di tipo di build, mantenendo al contempo i vantaggi del plug-in (build riproducibili e memorizzabili nella cache). (I09d6f, b/278266663).

Correzioni di bug

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

Versione 2.6.0-alpha02

21 giu 2023

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

Plug-in Room Gradle

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 alla presenza di input e output degli 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 una connessione DSL per configurare la posizione di base dello schema:

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 l'output dei file di schema in cartelle personalizzate, ad esempio schemas/flavorOneDebug/com.package.MyDatabase/1.json. Come di consueto, questi file vengono inseriti nel repository per essere utilizzati per la convalida e le migrazioni automatiche. Al momento della 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 dal plug-in. Si tratta di un'operazione di migrazione una tantum che deve essere eseguita manualmente. La documentazione dello schema in developers.android.com verrà aggiornata in futuro una volta che il feedback verrà risolto e che il plug-in sarà stabile, quindi prova a farlo.

Modifiche alle API

  • RoomDatabase.QueryCallback è stata definita come un'interfaccia funzionale che consente gli utilizzi delle conversioni 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

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

Nuove funzionalità

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

Nota: quando utilizzi Kotlin CodeGen, è importante tenere presente che sono state aggiunte ulteriori 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 archiviato fisso. Un'altra limitazione aggiunta riguarda il fatto che i tipi restituiti di raccolte nullable non sono più consentiti nella stanza virtuale per Kotlin CodeGen.

Avviso:potresti notare che i tuoi progetti sono più rigidi in termini di nullità quando utilizzi Kotlin CodeGen. In Kotlin CodeGen, il valore nulla degli argomenti di tipo è importante, mentre in Java questo viene per lo più ignorato. Ad esempio, supponiamo che tu abbia un tipo di restituzione "Flow<foo\>" e che la tabella sia vuota. In Java CodeGen questo non causerà alcun problema, mentre in Kotlin CodeGen riceverai un errore. Per evitarlo, devi utilizzare "Flow<foo?\>", supponendo che venga emesso un valore null. </foo?\></foo\>

Modifiche alle API

  • Protezione dall'utilizzo privo di significato delle raccolte con valori nulli nei tipi restituiti dei metodi DAO. (I777dc, b/253271782, b/259426907)
  • Aggiungi un'API per la creazione di un flusso che emetta modifiche del tracker di invalidità. L'API è utile per creare flussi che devono reagire alle modifiche al database. (I8c790, b/252899305)

Correzioni di bug

  • Non consentire le proprietà astratte come getter DAO o query DAO in codegen Kotlin; dovrebbero invece essere riscritte come funzioni per evitare la falsa idea che il valore della proprietà sia immutabile e abbia un risultato memorizzato fisso. (If6a13, b/127483380, b/257967987).

Versione 2.5.2

Versione 2.5.2

21 giu 2023

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

Correzioni di bug

  • Correggi un problema di incompatibilità con kotlinx-metadata-jvm. (386d5c)
  • Risolvi un problema che causa un errore nella stanza virtuale quando viene utilizzata in un test Robolectric. (f79bea, b/274924903).

Versione 2.5.1

Versione 2.5.1

22 marzo 2023

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

Correzioni di bug

  • Evita di controllare la directory padre del database in FrameworkSQLiteHelper se il database è già aperto. (5de86b8).
  • Usa un controllo isOpenInternal per verificare se il database è già aperto. (e91fb35).
  • È ora disponibile una migliore gestione della richiesta di rientro nella stanza acquireTransactionThread() della stanza. (219f98b). Durante una transazione sospesa, la stanza virtuale utilizza un thread dall'esecutore della transazione, avvia un loop di eventi al suo interno e vi invia le operazioni di database sospese in modo che siano tutte incapsulate all'interno della coroutine della transazione. Di solito è previsto che il thread della transazione sia diverso da quello che inizia la transazione, ma in alcuni casi è uguale. Per gestire questi casi rientranti, è stato eseguito il refactoring di withTransaction() in modo che non si basi più su un job di controllo e, al contrario, eseguirà il blocco di transazioni sospese dall'interno di runBlocking nel thread delle transazioni.

Versione 2.5.0

Versione 2.5.0

22 febbraio 2023

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 vengono rilasciati. La versione 2.5.0 contiene questi commit.

Versione 2.5.0

11 gennaio 2023

androidx.room:room-*:2.5.0 viene rilasciato. 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 sorgente se il tuo codice è in Kotlin a causa della conversione delle librerie a 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 alla proprietà sui file Kotlin. Segnala un bug se sono presenti incompatibilità significative.
  • È stata aggiunta una nuova annotazione della scorciatoia, @Upsert, che tenta di inserire un'entità quando non ci sono conflitti di univocità o di aggiornare l'entità in caso di conflitto. (I7aaab, b/241964353).
  • Sono stati aggiunti nuovi elementi di paging della stanza room-paging-rxjava2, room-paging-rxjava3 e room-paging-guava per il supporto in Paging della stanza.
  • Sono state aggiunte API per fornire i nomi delle tabelle di chiavi e valori per la disambiguazione in @MapInfo (Icc4b5)

Versione 2.5.0-rc01

7 dicembre 2022

androidx.room:room-*:2.5.0-rc01 viene rilasciato. 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

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

Modifiche alle API

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

Versione 2.5.0-beta01

5 ottobre 2022

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

Modifiche alle API

  • Limita la versione minima che supporta @Upsert in modo che sia l'API 16. Questo è dovuto all'impossibilità di identificare un conflitto di vincoli di chiave primaria nelle API precedenti. (I5f67f, b/243039555).

Correzioni di bug

  • Risolto un problema per cui le tabelle shadow venivano esportate in modo errato nei file di schema .json, danneggiandoli. (I4f83b, b/246751839).

Versione 2.5.0-alpha03

24 agosto 2022

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

Nuove funzionalità

  • È stata aggiunta una nuova annotazione della scorciatoia, @Upsert, che tenta di inserire un'entità quando non ci sono conflitti di univocità o 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. (I328dd)
  • Correggi una modifica incompatibile con l'origine Kotlin per getter / proprietà di getOpenHelper, getQueryExecutor e getTransactionExecutor. (Iad0ac).

Versione 2.5.0-alpha02

1° giugno 2022

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

Nuove funzionalità

Modifiche alle API

  • L'intero dominio room-runtime è stato convertito da Java a Kotlin. (If2069, b/206859668),(Ie4b55, b/206859668), (I697ee, b/206859668), (I96c25, b/5)

    Nota: potresti riscontrare problemi di incompatibilità della fonte a causa della conversione delle librerie a Kotlin. Se il tuo codice si trovava in Kotlin e chiamava la versione precedente della stanza virtuale, 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 fornire i nomi delle tabelle di chiavi e valori per la disambiguazione in @MapInfo (Icc4b5)
  • Risolvi un problema di compatibilità delle origini per consentire di nuovo @Ignore nei getter delle proprietà. (Ifc2fb).

Correzioni di bug

  • Algoritmo euristico per la risoluzione delle colonne duplicato. Ora la stanza tenterà di risolvere le colonne ambigue in una query multimappa. In questo modo i JOIN con tabelle contenenti tabelle con lo stesso nome possono essere mappati correttamente a un oggetto dati risultato. (I4b444, b/201306012, b/212279118).

Versione 2.5.0-alpha01

23 febbraio 2022

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

Modifiche alle API

  • Risolto il problema per cui l'utilizzo della stanza @IntDef non veniva applicato nelle origini Kotlin. (I75f41, b/217951311)
  • Risolto un problema di compatibilità delle origini per consentire di nuovo @Query nei getter delle proprietà. (I0a09b).
  • Camera comune riconvertita da Java a Kotlin. (I69c48, b/206858235).

    Nota: potresti riscontrare problemi di incompatibilità delle fonti poiché alcune proprietà sono state spostate in oggetti associati durante la conversione delle librerie a Kotlin. Se il codice si trovava in Kotlin e chiama la versione precedente della Room, la nuova versione avrà bisogno del suffisso ".Companion" quando accedi a queste proprietà.

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

Correzioni di bug

  • Aggiunto il supporto per le proprietà interne nelle sorgenti Kotlin. Si tratta di un leggero cambiamento del comportamento in Room, in cui utilizzerà il nome di origine delle funzioni abbinandole alle proprietà come getter/setter (in precedenza, utilizzava il nome JVM della funzione che è diverso per le funzioni/proprietà interne). Se utilizzi annotazioni @JvmName personalizzate per abbinare getter/setter a proprietà private, controlla il codice generato dopo l'aggiornamento (If6531, b/205289020)

Versione 2.4.3

Versione 2.4.3

27 luglio 2022

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

Correzioni di bug

  • Risolto un problema per cui la stanza non riconosceva le funzioni di sospensione in Kotlin 1.7 (b/236612358)

Versione 2.4.2

Versione 2.4.2

23 febbraio 2022

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

Correzioni di bug

  • Risolvi un problema di generazione del codice per una funzione di sospensione @Transaction di Dao 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 la stanza genera 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

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

Correzioni di bug

  • Aggiunto il supporto per le proprietà interne nelle sorgenti Kotlin. Si tratta di un leggero cambiamento del comportamento in Room, in cui utilizzerà il nome di origine delle funzioni abbinandole alle proprietà come getter/setter (in precedenza, utilizzava il nome JVM della funzione che è diverso per le funzioni/proprietà interne). Se utilizzi annotazioni @JvmName personalizzate per abbinare getter/setter a proprietà private, controlla il codice generato dopo l'aggiornamento (If6531, b/205289020)

Versione 2.4.0

Versione 2.4.0

15 dicembre 2021

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

Modifiche importanti dalla versione 2.3.0

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

Versione 2.4.0-rc01

1° dicembre 2021

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

Nuove funzionalità

  • Aggiorna la dipendenza della stanza dal punto di accesso principale a 1.6.0-1.0.1 per supportare Kotlin 1.6

Versione 2.4.0-beta02

17 novembre 2021

androidx.room:room-*:2.4.0-beta02 viene rilasciato. 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 sulla possibilità di nulla nei tipi. Poiché queste informazioni sono disponibili solo nel principale punto di forza, sono attive per impostazione predefinita solo nel principale punto di riferimento. Se causa problemi, puoi disattivarlo passando room.useNullAwareTypeAnalysis=false al processore di annotazione. In questo caso, segnala un bug del file, perché in futuro questo flag verrà rimosso. Con questo nuovo analizzatore TypeConverter, si consiglia di fornire solo TypeConverter che ricevono valori non null poiché il nuovo analizzatore ha la possibilità di includerli con un controllo null. Tieni presente che ciò non ha alcun impatto per gli utenti che utilizzano KAPT o Java, in quanto i processori di annotazione (a differenza di KSP) non hanno informazioni su nientebili nei tipi. (Ia88f9, b/193437407).
  • Correggere un bug per cui la stanza non veniva compilata con un errore SQL quando un'entità FTS ha dichiarato di utilizzare il tokenizzatore ICU. (I00db9, b/201753224).
  • È stato risolto il problema nelle migrazioni automatiche di una nuova colonna aggiunta a un'entità incorporata tra le versioni. (I5fcb1b/193798291)
  • Abbiamo risolto un problema relativo ai tipi restituiti del metodo di query relazionale 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 trovato nel cursore. Se non vengono trovati valori validi, una chiave verrà mappata a una raccolta vuota. (Id5552b/201946438)
  • Risolto il problema di migrazione automatica per cui le parole chiave SQLite non utilizzavano i caratteri di escape nei nomi delle colonne. (Idbed4b/197133152)

Versione 2.4.0-beta01

13 ottobre 2021

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

Correzioni di bug

  • Risolto il problema relativo alle migrazioni automatiche che non aggiungevano nuove colonne quando anche un'altra tabella nella stessa migrazione automatica aveva una nuova colonna con lo stesso nome. (Ia5db5, b/200818663).
  • L'implementazione PagingSource generata dalla stanza virtuale ora utilizza il valore queryExecutor trasmesso tramite RoomDatabase.Builder, quindi può essere sostituito, anziché Dispatchers.IO in precedenza. (Iae259).

Versione 2.4.0-alpha05

29 settembre 2021

androidx.room:room-*:2.4.0-alpha05 viene rilasciato. 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 ulteriori dettagli, consulta la documentazione di TypeConverters. (36ae9e, b/195413406).

  • Supporto di chiavi/valori non POJO per i tipi di restituzione di più mappe nei DAO tramite l'annotazione @MapInfo. (I4d704)

La colonna @MapInfo sarà obbligatoria se la colonna della chiave o del valore della mappa si trova in 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>
  • Imposta room-paging come artefatto obbligatorio quando utilizzi Paging3 con la stanza virtuale. (Ieaffe)

Correzioni di bug

  • Risolvi un problema per cui i risultati delle query multimappa non venivano ordinati correttamente quando la query conteneva una clausola ORDER BY di una colonna dalla chiave della mappa. (I6b887)

Contributi esterni

  • È 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

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

Nuove funzionalità

  • La stanza ora supporta i tipi di restituzione multimappa @Dao, utili per le istruzioni JOIN. I tipi di multimappe supportati sono Map, così come ImmutableMap, ImmutableSetMultimap e ImmutableListMultimap di Guava.

    Di seguito sono riportati alcuni esempi di query multimap:

    Mappa delle relazioni 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 multipla 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 le coroutine Flow.

Cerca in camera

  • Viene rilasciato androidx.room:room-paging, che fornisce il supporto nativo per Paging 3.0 per le query stanza 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 dalla stanza virtuale con un'implementazione basata sulle API Paging 3.0. La nuova implementazione di PagingSource analizza le chiavi in modo diverso, quindi qualsiasi chiave fornita manualmente a PagingSource della stanza deve tenere conto di questa modifica del comportamento, inclusa la chiave iniziale passata tramite il costruttore del Pager. Le pagine inizieranno a essere caricate da Key e Key sarà il primo elemento caricato. Questo differisce dal comportamento esistente in cui LoadParams.Refresh.Key viene trattato come la posizione di scorrimento dell'utente e gli elementi vengono caricati prima e dopo la chiave.

  • L'elemento è facoltativo e se lo disattivi, verrà usato il supporto esistente per Paging 3.0 che è stato introdotto nella stanza 2.3. Tuttavia, questo artefatto diventerà non facoltativo nella release futura per gli utenti che utilizzano la stanza virtuale con Paging 3.0. Per l'attivazione, aggiungi il nuovo artefatto di paging della stanza a classpath. Se utilizzi Gradle, puoi aggiungere il seguente snippet a build.gradle:

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

Correzioni di bug

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

Versione 2.4.0-alpha03

16 giugno 2021

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

Modifiche alle API

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

Correzioni di bug

  • Risolto il problema della libreria nativa SQLite di Room per supportare i chip M1 di Apple. (b/174695268

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

  • Risolvi un problema relativo agli indici nelle migrazioni automatiche. B/177673291

Aggiornamenti delle dipendenze

  • L'assistenza per i punti di forza principali della stanza ora dipende dal principale punto di forza 1.5.10-1.0.0-beta01. (1ecb11, b/160322705)

Versione 2.4.0-alpha02

5 maggio 2021

androidx.room:room-*:2.4.0-alpha02 viene rilasciato. 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(). In questo modo, un framework di inserimento delle dipendenze può fornire queste specifiche quando hanno bisogno di dipendenze complesse.

Correzioni di bug

  • Risolvi un problema con le migrazioni automatiche per cui i @DatabaseView non venivano ricreati correttamente.

Contributi esterni

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

Versione 2.4.0-alpha01

21 aprile 2021

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

Nuove funzionalità

  • Migrazioni automatiche: la stanza ora offre un'API per la generazione automatica delle migrazioni, a condizione che gli schemi vengano esportati. Per comunicare alla stanza che deve generare una migrazione automatica, è possibile usare una nuova proprietà @Database#autoMigrations per dichiarare le versioni da e verso cui eseguire la migrazione automatica. Quando la stanza ha bisogno di informazioni aggiuntive su rinominazioni o eliminazioni di tabelle e colonne, l'annotazione @AutoMigration può dichiarare una classe di specifica contenente questi input. Per ulteriori dettagli, consulta la documentazione di @AutoMigration.

Correzioni di bug

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

Versione 2.3.0

Versione 2.3.0

21 aprile 2021

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

Modifiche importanti dalla versione 2.2.0

  • Supporto Enum integrato: per impostazione predefinita, per la stanza virtuale verrà utilizzato un convertitore di tipo Enum in stringa e viceversa, se non viene fornito alcun valore. Se esiste già un convertitore di tipi per un'enumerazione, la stanza virtuale darà la priorità all'utilizzo rispetto a quella predefinita.
  • Callback delle query: la stanza ora offre un'API di callback generale RoomDatabase.QueryCallback, utile per l'accesso alle build di debug quando stanno per essere eseguite le query. Il callback può essere impostato tramite RoomDatabase.Builder#setQueryCallback().
  • Miglioramento predefinito: la stanza ora dispone di API per la creazione di un database utilizzando un database predefinito che viene letto da un flusso di input. Ciò consente i casi in cui il database predefinito è compresso con gzip.
  • Convertitori dei tipi forniti: il locale ora dispone di API per fornire istanze di convertitori di tipi, in modo che l'app possa controllarne l'inizializzazione. Per contrassegnare un convertitore dei tipi che verrà fornito alla stanza virtuale, utilizza la nuova annotazione @ProvidedTypeConverter.
  • Supporto RxJava3: la stanza virtuale ora supporta i tipi RxJava3. In modo simile a RxJava2, puoi dichiarare i metodi DAO il cui tipo restituito sono Flowable, Single, Become e Completabile. Inoltre, è disponibile un nuovo artefatto androidx.room:room-rxjava3 per supportare RxJava3.
  • Assistenza Paging 3.0: la stanza ora 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

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

Correzioni di bug

  • Risolvi un problema che impediva l'utilizzo delle query di Coroutine Flow create dalla stanza virtuale in un blocco withTransaction sospeso. (I797bf)

Versione 2.3.0-beta03

10 marzo 2021

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

Nuove funzionalità

  • Aggiunto il supporto della compilazione incrementale per il principale punto di forza. (I031c1, b/176453350).

Correzioni di bug

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

Contributi esterni

  • Consenti alla stanza di accettare un tipo restituito POJO in un metodo DAO annotato @Query quando questo è anche annotato con @SkipQueryVerification. La stanza virtuale farà il possibile per convertire il risultato della query nel tipo restituito POJO, allo stesso modo in cui viene fatto per un metodo DAO annotato con @RawQuery. Grazie a "Markus Riegel | hey@marcorei.com". (I45acb)

Versione 2.3.0-beta02

18 febbraio 2021

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

Nuove funzionalità

  • La stanza virtuale ora supporta il supporto sperimentale per l'elaborazione dei simboli Kotlin KSP.

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

    Per utilizzare Room con il principale punto di forza, puoi applicare il plug-in Gradle del principale punto di forza e sostituire la configurazione kapt nel file di build con ksp. Ad esempio, anziché 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 relativa al principale punto di forza.

    Tieni presente che, poiché il principale punto di forza è sperimentale, ti consigliamo di utilizzare comunque KAPT per il codice di produzione. La riduzione dei tempi di build è applicabile solo se non ci sono altri processori che utilizzano KAPT. Consulta la pagina b/160322705 per i problemi noti.

Versione 2.3.0-beta01

27 gennaio 2021

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

Nuove funzionalità

  • Database chiudibili automaticamente: la stanza ora è in grado di chiudere i database a cui non è possibile accedere 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 delle strategie, ignorando di fatto quella definita. (/I0b90d, b/176138543)

Versione 2.3.0-alpha04

16 dicembre 2020

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

Nuove funzionalità

  • La stanza virtuale ora offre un'API di callback generale RoomDatabase.QueryCallback, per quando stanno per essere eseguite le query, utile per accedere alle build di debug. Il callback può essere impostato tramite RoomDatabase.Builder#setQueryCallback(). (Iaa513, b/174478034, b/74877608).
  • Ora per la stanza virtuale viene utilizzato un convertitore di tipo da Enum a stringa e viceversa, se non ne viene specificato uno. Se esiste già un convertitore di tipi per un'enumerazione, la stanza virtuale darà la priorità all'utilizzo rispetto a quella predefinita. (b/73132006)

Problema noto

  • Se esiste già un convertitore di tipo unidirezionale per l'Enum, la stanza virtuale potrebbe utilizzare accidentalmente il convertitore integrato da Stringa a Enum, cosa che potrebbe non essere desiderata. Si tratta di un problema noto che può essere risolto impostando un convertitore bidirezionale. Consulta: b/175707691

Correzioni di bug

  • Risolto il problema per cui la stanza disattivava erroneamente l'elaborazione incrementale delle annotazioni nelle versioni JDK più recenti. (b/171387388)
  • Risolto il problema per cui la stanza trova il corso generato quando vengono utilizzati più caricatori di corsi. Grazie per la correzione "Serendipity | 892449346@qq.com" (b/170141113)
  • Risolto il problema per cui la stanza generava un codice errato quando un Kotlin @Dao aveva una classe base le cui generiche sono primitive nella JVM. (b/160258066)

Contributi esterni

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

Versione 2.3.0-alpha03

14 ottobre 2020

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

Nuove funzionalità

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

  • La stanza ora dispone di API per creare un database utilizzando un database predefinito che viene letto da un flusso di input. Ciò consente i casi in cui il database predefinito è compresso con 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 per righe. (I07c56, b/77307836).

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

  • Aggiorna la documentazione sui metodi di aggiunta/rimozione dei metodi di osservazione per chiarire l'organizzazione in thread (Ifd1d9, b/153948821)

  • Risolvi un problema relativo alla camera che convalida erroneamente le tabelle FTS che hanno dichiarato la colonna rowid. (d62ebc, b/145858914)

Contributi esterni

  • Risolvere i problemi relativi alle impostazioni internazionali maiuscole/minuscole relative alla lingua turca (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 viene copiato un database predefinito. (I1ba74, b/148934423).

Versione 2.3.0-alpha02

22 luglio 2020

androidx.room:room-*:2.3.0-alpha02 viene rilasciato. 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 i metodi DAO il cui tipo restituito sono Flowable, Single, Become e Completabile. Inoltre, è disponibile un nuovo artefatto androidx.room:room-rxjava3 per supportare RxJava3. (b/152427884)

Modifiche alle API

  • Ora è supportata la dichiarazione di un @TypeConverter nella classe di oggetto Kotlin. (b/151110764)
  • L'opzione di elaborazione delle annotazioni incrementali della stanza è ora attiva per impostazione predefinita. (b/112110217)

Versione 2.3.0-alpha01

10 giugno 2020

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

Nuove funzionalità

  • Assistenza Paging 3.0: la stanza ora supporterà la generazione di implementazioni per i metodi annotati @Query 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 e pratica annotazione che fa sì che la stanza virtuale riscrivi la proiezione "*" in una query in modo che le colonne inutilizzate nel risultato vengano rimosse.
  • L'opzione del processore room.expandProjection è ora deprecata. Usa @RewriteQueriesToDropUnusedColumns al posto delle query di ottimizzazione delle stanze con proiezioni a stella. Tieni presente che @RewriteQueriesToDropUnusedColumns non sostituisce la soluzione per i conflitti di colonne room.expandProjection offerta per quanto riguarda i tipi restituiti che contenevano i campi @Embedded.

Correzioni di bug

  • Risolto un bug per cui la stanza non rilevava correttamente la versione JDK utilizzata per abilitare il processore di annotazioni incrementali. Grazie a Blaz Solar (me@blaz.solar) (b/155215201)
  • La stanza ora incorpora la sua dipendenza ANTLR con il processore di annotazione per evitare conflitti di versione con altri processori che usano ANTLR. (b/150106190)

Versione 2.2.6

Versione 2.2.6

16 dicembre 2020

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

Correzioni di bug

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

Versione 2.2.5

Versione 2.2.5

18 marzo 2020

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

Correzioni di bug

  • Crea directBootAware di MultiInstanceInvalidationService. Grazie a "Mygod contact-git@mygod.be" (b/148240967)
  • Risolto un bug che causava un arresto anomalo quando veniva abilitata l'annullamento della convalida di più istanze e il database conteneva un'entità FTS. (b/148969394)
  • Risolto il problema durante il caricamento delle librerie native SQLite nel processore di annotazioni delle stanze, 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 pubblicati i programmi 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 il problema di sospensione delle transazioni in cui si sarebbe verificato un deadlock se la coroutine venisse annullata rapidamente prima dell'avvio effettivo della transazione. (b/148181325)
  • Risolto il problema per cui @generate viene utilizzato in modo errato durante la creazione con JDK 9. (b/146538330)
  • Risolto il problema per cui la stanza 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

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

Correzioni di bug

  • Risolto il bug per cui Room non convalidava un database che non era stato sottoposto a migrazione e conteneva un hash precedente con indici nel suo schema. (b/139306173)

Versione 2.2.2

Versione 2.2.2

20 novembre 2019

androidx.room:room-*:2.2.2 viene rilasciato. 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 della stanza virtuale. (b/143105450)

Versione 2.2.1

Versione 2.2.1

23 ottobre 2019

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

Correzioni di bug

  • Risolto un bug per cui la stanza virtuale avrebbe avvisato erroneamente di CURSOR_MISMATCH con l'opzione di compilazione expandProjection attivata. (b/140759491)
  • È stato aggiunto un meccanismo di nuovo tentativo per gestire la libreria nativa mancante utilizzata per verificare le query durante la compilazione.

Versione 2.2.0

Versione 2.2.0

9 ottobre 2019

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

Modifiche importanti dalla versione 2.1.0

  • Database predefinito: sono ora disponibili due nuove API in RoomDatabase.Builder per la creazione di un RoomDatabase in base a un file di database già popolato. createFromAsset() è per quando il file di database precompilato si trova nella cartella degli asset dell'APK, mentre createFromFile() è per quando il file si trova in una posizione arbitraria. L'utilizzo di queste API cambia il comportamento delle migrazioni distruttive in modo che, durante una migrazione di riserva, Room tenti di copiare nuovamente il database precompilato, se disponibile, altrimenti esegue il fallback semplicemente eliminando e ricreando tutte le tabelle.b/62185732
  • Valori predefiniti dello schema: ora @ColumnInfo 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 verranno convalidati durante le migrazioni, se specificato. b/64088772
  • Molte relazioni: ora @Relation ha una nuova proprietà associateBy, che include 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 individuali: la limitazione nei campi POJO annotati con @Relation affinché sia di tipo List o Set è stata rimossa, consentendo di rappresentare in modo efficace le relazioni con un singolo valore.b/62905145
  • Entità target: le annotazioni 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, questo consente inserti, 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 osservate nella query sono invalidate. Una volta dichiarata una funzione DAO con un tipo restituito Channel<T> è un errore, Room ti incoraggia a utilizzare Flow e poi a usare le funzioni vicine per convertire Flow in Channel. B/130428884
  • Processore di annotazioni incrementali Gradle: la stanza ora è un processore di annotazione per l'isolamento Gradle e può essere attivata tramite l'opzione del processore room.incremental. Per ulteriori informazioni, consulta le opzioni per il compilatore della stanza. In caso di problemi, invia una segnalazione di bug qui. Prevediamo di abilitare l'incrementbilità per impostazione predefinita in una versione futura stabile. b/112110217
  • Espansione delle proiezioni: è stata aggiunta una nuova opzione di compilatore sperimentale room.expandProjection che consente alla Room di riscrivere una query con una proiezione a stella che contiene solo le colonne nel tipo restituito POJO. Ad esempio, per un metodo DAO con @Query("SELECT * FROM Song") che restituisce un POJO denominato SongIdAndTitle con solo due campi. Quindi, Room riscriverà la query in SELECT id, title FROM Song in modo che venga recuperato il set minimo di colonne per soddisfare il tipo restituito. In questo modo elimini sostanzialmente l'avviso CURSOR_MISMATCH che viene mostrato quando la query restituisce colonne aggiuntive che non corrispondono ad alcun campo nel tipo POJO restituito.

Versione 2.2.0-rc01

5 settembre 2019

androidx.room:room:2.2.0-rc01 viene rilasciato. 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

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

Correzioni di bug

  • Risolto un bug per cui una query Flusso di coroutine interrompeva la riemissione di nuovi valori dopo un determinato periodo di tempo. (b/139175786)
  • Risolto il bug per cui la stanza virtuale non accettava un codice hash dello schema legacy durante l'apertura di un database che non era stata eseguita dalla stanza 1.0, causando un arresto anomalo del runtime a causa di uno schema non valido. (b/139306173)

Versione 2.2.0-alpha02

7 agosto 2019

androidx.room:room-*:2.2.0-alpha02 viene rilasciato. 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 osservate nella query sono invalidate. Una volta dichiarata una funzione DAO con un tipo restituito Channel<T> è un errore, Room ti incoraggia a utilizzare Flow e poi a usare le funzioni vicine per convertire Flow in Channel. B/130428884
  • Espansione delle proiezioni: è stata aggiunta una nuova opzione di compilatore sperimentale room.expandProjection che consente alla Room di riscrivere una query con una proiezione a stella che contiene solo le colonne nel tipo restituito POJO. Ad esempio, per un metodo DAO con @Query("SELECT * FROM Song") che restituisce un POJO denominato SongIdAndTitle con solo due campi. Quindi, Room riscriverà la query in SELECT id, title FROM Song in modo che venga recuperato il set minimo di colonne per soddisfare il tipo restituito. In questo modo elimini sostanzialmente l'avviso CURSOR_MISMATCH che viene mostrato quando la query restituisce colonne aggiuntive che non corrispondono ad alcun campo nel tipo POJO restituito.
  • onDestructiveMigrate è una nuova API di callback aggiunta a RoomDatabase.Callback per quando la stanza virtuale esegue in modo dannoso la migrazione di un database. b/79962330

Correzioni di bug

  • Risolto il bug per cui la stanza virtuale generava un codice errato utilizzando un metodo come setter del campo quando il campo era protetto. b/136194628
  • Risolto un bug per cui InvalidationTracker generava un NPE in un secondo processo quando era abilitata l'annullamento della convalida di più istanze e il servizio di annullamento dell'annullamento era stato interrotto.b/137454915
  • Risolto il bug per cui la stanza virtuale 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 equivalente. b/137881998
  • Risolto il bug per cui la stanza si lamentava della mancanza di setter sui POJO utilizzati come parametri di entità parziale di @Insert, @Update e @Delete. B/138664463
  • Risolto un bug per cui la stanza virtuale si lamentava di getter e setter mancanti per una colonna ignorata tramite @Entity quando la classe entità veniva utilizzata in determinati metodi DAO. b/138238182
  • Risolto il 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: sono ora disponibili due nuove API in RoomDatabase.Builder per la creazione di un RoomDatabase in base a un file di database già popolato. createFromAsset() è per quando il file di database precompilato si trova nella cartella degli asset dell'APK, mentre createFromFile() è per quando il file si trova in una posizione arbitraria. L'utilizzo di queste API cambia il comportamento delle migrazioni distruttive in modo che, durante una migrazione di riserva, Room tenti di copiare nuovamente il database precompilato, se disponibile, altrimenti esegue il fallback semplicemente eliminando e ricreando tutte le tabelle.b/62185732
  • Valori predefiniti dello schema: ora @ColumnInfo 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 verranno convalidati durante le migrazioni, se specificato. b/64088772

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

  • Molte relazioni: ora @Relation ha una nuova proprietà associateBy, che include 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 individuali: la limitazione nei campi POJO annotati con @Relation affinché sia di tipo List o Set è stata rimossa, consentendo di rappresentare in modo efficace le relazioni con un singolo valore.b/62905145
  • Entità target: le annotazioni 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, questo consente inserti, eliminazioni e aggiornamenti parziali. b/127549506
  • Processore di annotazioni incrementali Gradle: la stanza ora è un processore di annotazione per l'isolamento Gradle e può essere attivata tramite l'opzione del processore room.incremental. Per ulteriori informazioni, consulta le opzioni per il compilatore della stanza. In caso di problemi, invia una segnalazione di bug qui. Prevediamo di abilitare l'incrementbilità per impostazione predefinita in una versione futura stabile. b/112110217

Correzioni di bug

  • La stanza virtuale non propaga più la proprietà EmptySetResultException al gestore degli errori globale quando il flusso Rx di una query viene eliminato prima del completamento della query. b/130257475
  • Risolto il bug per cui la stanza mostrava un messaggio di errore errato quando una funzione DAO di sospensione annotata con @RawQuery non mostrava un tipo restituito. b/134303897
  • La stanza virtuale 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 da 2.1.0-rc01. I commit inclusi nella versione sono disponibili qui.

Modifiche importanti dalla versione 2.0.0

  • FTS: la stanza ora supporta le entità con una tabella di mappatura FTS3 o FTS4. Le classi annotate con @Entity ora possono essere aggiunte anche con @Fts3 o @Fts4 per dichiarare una classe con una tabella di ricerca a testo intero di mappatura. Le opzioni FTS per ulteriori personalizzazioni sono disponibili tramite i metodi dell'annotazione.
  • Visualizzazioni: la stanza ora supporta la dichiarazione di una classe come query archiviata, nota anche come vista, utilizzando l'annotazione @DatabaseView.
  • Couroutine: i metodi DAO ora possono essere sospesi. Includi room-ktx nelle dipendenze per sfruttare questa funzionalità. L'artefatto ktx fornisce anche la funzione di estensione RoomDatabase.withTransaction per eseguire transazioni di database all'interno di una coroutine.
  • Valore automatico: la stanza ora supporta la dichiarazione di classi annotate AutoValue come entità e POJO. Le annotazioni per camera @PrimaryKey, @ColumnInfo, @Embedded e @Relation ora possono essere dichiarate nei metodi astratti di una classe con valori automatici annotati. Tieni presente che queste annotazioni devono anche essere accompagnate da @CopyAnnotations affinché la stanza virtuale possa capirla correttamente.
  • Supporto asincrono aggiuntivo: i metodi DAO annotati con @Insert, @Delete o @Update, insieme a @Query che contengono istruzioni INSERT, DELETE o UPDATE, ora supportano i tipi di reso Rx Completable, Single, Maybe e il tipo restituito di Guava ListenableFuture, oltre a poter sospendere le funzioni.
  • enableMultiInstanceInvalidation è una nuova API in RoomDatabase.Builder per abilitare 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 in base al nome.
  • La stanza 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

  • Risolto un errore di inizializzazione della stanza che potrebbe verificarsi a causa di una configurazione temp_store già impostata. b/132602198
  • Risolto il problema di utilizzo delle virgolette doppie per gli utenti con SQLite 3.27.0 e versioni successive. b/131712640
  • Risolto il bug per cui InvalidationTracker causava un arresto anomalo quando venivano eseguiti più controlli di invalidazione 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 ad API / comportamento

  • La funzione dell'estensione RoomDatabase.withTransaction è stata modificata in modo che non utilizzi più un blocco funzione con CoroutineScope come destinatario. Questo impedisce di saltare il wrapper coroutineScope { } aggiuntivo necessario per eseguire contemporaneamente elementi nel blocco transazioni.

Correzioni di bug

  • Risolto il bug per cui la stanza non corrispondeva a un TypeConverter per una funzione DAO Kotlin contenente un parametro di tipo Raccolta. b/122066791

Versione 2.1.0-alpha06

22 marzo 2019

Modifiche ad API / comportamento

  • Le query sulle transazioni asincrone ora sono serializzate in modo che la stanza virtuale non utilizzi più di un thread per l'esecuzione delle transazioni del database. RoomDatabase.Builder.setTransactionExecutor(Executor) è stato aggiunto per consentire la configurazione dell'esecutore da utilizzare per le transazioni.
  • RoomDatabase.runInTransaction(Callable) non eseguirà più il wrapping delle eccezioni selezionate in RuntimeEccezioni. b/128623748

Correzioni di bug

  • Risolto un bug per cui il tracker dell'annullamento della convalida smetteva di osservare una tabella dei contenuti se venivano aggiunti gli osservatori sia per la tabella dei contenuti che per una tabella FTS dei contenuti esterni.b/128508917
  • È stata aggiornata la grammatica SQLite della stanza 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 modo sicuro transazioni di database all'interno di una coroutine. Le funzioni delle estensioni della stanza e il supporto delle coroutine sono disponibili nell'elemento room-ktx.
  • I metodi DAO non astratti annotati con @Transaction ora possono essere sospesi. b/120241587

Modifiche ad API / comportamento

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

Correzioni di bug

  • Risolto un bug per cui gli argomenti del tokenizzatore venivano eliminati se il tokenizzatore utilizzato era SEMPLICE. b/125427014
  • Risolto il bug per cui la stanza virtuale non riusciva a identificare correttamente le funzioni di sospensione con parametri whos type erano una classe interna. b/123767877
  • Risolto il 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 diversi bug per cui la stanza virtuale generava un codice errato per determinate funzioni di sospensione. b/123466702 e b/123457323
  • Risolto un bug per cui l'utilizzo deprecato dei metodi non veniva eliminato correttamente nel codice generato. b/117602586
  • È stata aggiornata la dipendenza della stanza 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 di 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 i tipi asincroni Single, Mayble, Completable e ListenableFuture. Inoltre, possono essere anche sospese le funzioni. b/120227284

Modifiche ad API / comportamento

  • Ora la stanza virtuale genererà un errore se un metodo DAO non astratto annotato con @Transaction restituisce un tipo asincrono come Single, Mayble, Completable, LiveData o ListenableFuture. Poiché le transazioni sono limitate ai thread, al momento è impossibile per la stanza virtuale iniziare e terminare una transazione relativa a una funzione che potrebbe 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

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

Versione 2.1.0-alpha03

4 dicembre 2018

Modifiche alle API

  • Il FTS tokenizer in @Fts3/@Fts4 ora richiede una stringa anziché una Enum. In questo modo la stanza può utilizzare tokenizzatori personalizzati. I tokenizzatori integrati sono ancora definiti in FtsOptions come costanti delle stringhe. b/119234881

Nuove funzionalità

  • Couroutine: i metodi DAO ora possono essere sospesi. 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

  • Risolto il bug per cui la stanza virtuale avrebbe tentato erroneamente di trovare un costruttore con colonne nella proprietà ignoredColumns di @Entity. B/119830714
  • Risolto il bug per cui la stanza virtuale non contrassegnava i parametri del metodo DAO come definitivi nell'implementazione generata. b/118015483
  • Risolto il bug per cui il processore della stanza si arrestava in modo anomalo quando veniva segnalato un errore su una query con simboli speciali. b/119520136
  • Risolto il bug per cui la stanza virtuale rifiutava altre varie implementazioni Collection come argomenti di un'espressione IN. b/119884035
  • Risolto il bug per cui LiveData restituita dalla stanza virtuale riceveva garbage collection quando osservato per sempre e, di conseguenza, non emetteva più nuovi dati. b/74477406
  • È stato aggiornato il blocco di chiusura di RoomDatabase per ridurre la contesa del blocco. b/117900450

Versione 2.1.0-alpha02

30 ottobre 2018

Nuove funzionalità

  • Aggiunto il supporto per il riferimento a @DatabaseView in @Relation. B/117680932

Correzioni di bug

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

Versione 2.1.0-alpha01

8 ottobre 2018

Nuove funzionalità

  • FTS: la stanza ora supporta le entità con una tabella di mappatura FTS3 o FTS4. Ora è possibile aggiungere @Fts3 o @Fts4 alle classi annotate con @Entity per dichiarare una classe con una tabella di ricerca a testo intero di mappatura. Le opzioni FTS per ulteriori personalizzazioni 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 ora supporta la dichiarazione di classi annotate AutoValue come entità e POJO. Le annotazioni per le stanze @PrimaryKey, @ColumnInfo, @Embedded e @Relation ora possono essere dichiarate nei metodi astratti di una classe con valore automatico. Tieni presente che queste annotazioni devono anche essere accompagnate da @CopyAnnotations affinché la stanza possa capirle correttamente. b/62408420
  • Supporto aggiuntivo per i tipi di reso Rx: i metodi DAO annotati con @Insert, @Delete o @Update ora supportano i tipi di reso Rx Completable, Single<T> e Maybe<T>. B/63317956
  • Tipi immutabili con @Relation: in precedenza la stanza richiedeva l'impostazione di campi annotati @Relation, ma ora possono essere parametri del costruttore.
  • enableMultiInstanceInvalidation: è una nuova API in RoomDatabase.Builder per abilitare l'annullamento della convalida in più istanze di RoomDatabase utilizzando lo stesso file di database. Questo meccanismo di annullamento della convalida 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 in base al nome. Utile per ignorare i campi ereditati su un'entità. b/63522075

Modifiche ad API / comportamento

  • mCallback e mDatabase in RoomDatabase ora sono @Deprecated e verranno rimossi nella prossima versione principale della stanza virtuale. b/76109329

Correzioni di bug

  • Risolti due problemi per cui la stanza non veniva ripristinata correttamente da un database danneggiato o una migrazione errata durante l'inizializzazione. b/111504749 e b/111519144
  • La stanza virtuale utilizzerà correttamente il costruttore principale di Kotlin nelle classi di dati, evitando di dover 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 ad API / comportamento

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

Correzioni di bug

  • Specifica il nome della classe/del campo nell'errore "Impossibile trovare getter per il campo" b/73334503
  • Correzione della compatibilità con le versioni precedenti di RoomOpenHelper con le versioni precedenti di Room b/110197391

Dipendenze pre-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 usi le migrazioni.

Risolto il bug per cui la stanza virtuale non gestiva correttamente l'inizializzazione dopo la 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 di Room in cui viene riciclato in anticipo la query, causando problemi se si aggiunge 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 dell'esame delle API, @RawQuery non accetta più il passaggio di String come parametro di query. Devi utilizzare [SupportSQLiteQuery][ref-SupportSQLiteQuery]. (consulta [SimpleSQLiteQuery][ref-SimpleSQLiteQuery] per creare facilmente un'istanza di [SupportSQLiteQuery][ref-SupportSQLiteQuery] con supporto degli argomenti).
  • Il metodo [fallbackToDestructivemigrationFrom][ref-fallbackToDestructive MigrationFrom] 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 e VACUUMcreando 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 della stanza ora gestisce correttamente le dipendenze multi-tabella (come relazioni e join). In precedenza, questi non avrebbero attivato nuovi risultati o la loro compilazione. 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 in merito da cui sono consentite le migrazioni distruttive delle versioni iniziali dello schema (rispetto a fallbackToDestructivemigration) b/64989640
  • La stanza ora supporta solo le API di paging più recenti (alpha-4+), con supporto della versione deprecata LivePagedListProvider. Per usare la nuova stanza Alpha, devi usare l'impaginazione alpha-4 o una pagina successiva e passare da LivePagedListProvider a LivePagedListBuilder se non l'hai ancora fatto.

Correzioni di bug

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