Mit der neuen Raumdatenbank in Android habe ich eine Anforderung, wo zwei sequenzielle Operationen ausgeführt werden müssen:
%Vor%Wenn ich das ausführe, sehe ich (beim Untersuchen der db), dass einige Zeilen fehlen - ich nehme an, dass sie nach dem Einfügen gelöscht werden. nämlich. Die erste Operation läuft parallel zur zweiten.
Wenn ich einen Transaktionsblock wie diesen verwende, ist alles in Ordnung - die erste Operation scheint abgeschlossen zu sein, bevor die zweite ausgeführt wird:
%Vor%Es ist auch in Ordnung, wenn ich stattdessen dazwischen schlafen lasse:
%Vor%Es scheint nicht viel Dokumentation für Room zu geben, und ich fragte mich, ob ich den Transaktionsblock wie oben verwenden sollte, wenn ich sequenzielle Operationen ausführen möchte, oder gibt es einen besseren Weg dazu.
> BEARBEITEN : Nachdem @CommonsWare darauf hingewiesen hat, sind @Query
asynchron, während @Insert
und @Delete
synchron sind. In Anbetracht dessen würde ich eine Abfrage erhalten, die Zeilen als async löscht:
Nach der Build-Ausgabe bekomme ich Deletion methods must either return void or return int (the number of deleted rows)
, wenn ich versuche, den Rückgabetyp in eine Flowable
einzubinden.
Wie in der Dokumentation zu Transaktion angegeben, können Sie Folgendes tun:
%Vor%Wie @CommonsWare heraushebt, sind @Query asynchron, während @Insert, @Delete, @Update synchron sind.
Wenn Sie mehrere Abfragen in einer einzigen Transaktion ausführen möchten, bietet Room auch eine Methode wie unten erwähnt.
%Vor%Ich hoffe, dass dies Ihr Problem lösen wird.
Tags und Links android android-room transactions android-database