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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 08:59:35  来源:igfitidea点击:

Android Room insertAll issues

javaandroiddatabasesqliteandroid-room

提问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)