Android Roomを使い始めましたが、問題が発生しています。
7つの注文のArrayListがあり、insertAll(List注文)を呼び出すと、4つの注文のみがデータベースに挿入されます。
何がブロックされているかを見つけるために、挿入クエリをどのようにデバッグできますか?
ありがとう
Roomが行う呼び出しは同期していないため、おそらく
List<Order> myOrders = mDb.getOrderDao().getAll()
まだ注文を挿入しています。
これを試して
@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());
}
});
OnConflictプロパティを追加する必要があります。
@Insert(onConflict = OnConflictStrategy.REPLACE)