Je commence à utiliser Android Room et j'ai des problèmes.
J'ai une liste de tableaux de 7 commandes et lorsque j'appelle insertAll (liste des commandes), seules 4 commandes sont insérées dans la base de données.
Comment puis-je déboguer la requête d'insertion afin de trouver ce qui bloque?
Merci
Les appels effectués par Room ne sont pas synchrones, donc probablement lorsque vous effectuez
List<Order> myOrders = mDb.getOrderDao().getAll()
il insère toujours les commandes.
Essaye ça
@Dao
public interface OrderDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
public long insertOrder(Order order);
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertAllOrders(List<Order> order);
@Query("SELECT * FROM orders")
List<Order> getAll();
}
@Entity(tableName = TABLE_NAME)
public class Order {
public static final String TABLE_NAME = "orders";
@PrimaryKey (autoGenerate = true)
private int id;
@SerializedName("order_number")
@ColumnInfo(name = "order_number")
private String orderNumber;
}
// Call
mDb.getOrderDao().insertAllOrders(orders);
Log.d(TAG, "inserted all");
Executor executor = Executors.newSingleThreadExecutor();
executor.execute(new Runnable() {
@Override
public void run() {
List<Order> myOrders = mDb.getOrderDao().getAll();
Log.d(TAG, "Orders nr = " + myOrders.size());
}
});
La propriété OnConflict doit être ajoutée.
@Insert(onConflict = OnConflictStrategy.REPLACE)