安卓房间插入所有问题
2022-09-02 11:55:29
我开始使用Android Room,但我遇到了一些麻烦。
我有一个包含7个订单的ArrayList,当我调用insertAll(List orders)时,只有4个订单入到数据库中。
如何调试插入查询以查找阻塞的内容?
谢谢
我开始使用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());
}
});
必须添加冲突属性。
@Insert(onConflict = OnConflictStrategy.REPLACE)