java Android 房间插入所有问题
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/45923172/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Android Room insertAll issues
提问by Jér?me
I'm starting using Android Room and I'm having some troubles.
我开始使用 Android Room,但遇到了一些麻烦。
I have an ArrayList of 7 Orders and when I call insertAll(List orders) only 4 orders are inserted into the database.
我有一个包含 7 个订单的 ArrayList,当我调用 insertAll(List orders) 时,只有 4 个订单被插入到数据库中。
How can I debug the insert query in order to find what is blocking ?
如何调试插入查询以查找阻塞的内容?
Thanks
谢谢
回答by joao86
The calls done by Room are not synchronous so probably when you perform
Room 完成的调用不是同步的,因此可能在您执行时
List<Order> myOrders = mDb.getOrderDao().getAll()
it is still inserting the orders.
它仍在插入订单。
Try this
试试这个
@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());
}
});
回答by Dipendra Sharma
OnConflict Property must be added.
必须添加 OnConflict 属性。
@Insert(onConflict = OnConflictStrategy.REPLACE)