Android 房间 insertAll 问题
Android Room insertAll issues
我开始使用 Android Room,但遇到了一些问题。
我有一个包含 7 个订单的 ArrayList,当我调用 insertAll(List orders) 时
只有 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)
我开始使用 Android Room,但遇到了一些问题。
我有一个包含 7 个订单的 ArrayList,当我调用 insertAll(List orders) 时 只有 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)