web-dev-qa-db-ja.com

Androidルームの挿入すべての問題

Android Roomを使い始めましたが、問題が発生しています。

7つの注文のArrayListがあり、insertAll(List注文)を呼び出すと、4つの注文のみがデータベースに挿入されます。

何がブロックされているかを見つけるために、挿入クエリをどのようにデバッグできますか?

ありがとう

12
Jérôme

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()); 
        }
});
16
joao86

OnConflictプロパティを追加する必要があります。

@Insert(onConflict = OnConflictStrategy.REPLACE) 
1
Dipendra Sharma