首页 > 解决方案 > 在android上插入房间数据后第二次查询后获取数据

问题描述

我正在使用房间持久性库来保存一些数据并获取这些数据。

首先,我将一些数据插入到房间,然后我尝试在另一个片段中插入数据。但第一次它是空的,第二次打开片段后它显示数据。我忘记了什么?

@Database(entities = {Cart.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    private static AppDatabase INSTANCE;
    public abstract CartDao m=CartDao();
    public static synchronized AppDatabase getInstance(Context ctx) {
        if (INSTANCE == null)
            INSTANCE = Room.databaseBuilder(ctx.getApplicationContext(),
                    AppDatabase.class, "db")
                    .fallbackToDestructiveMigration()
                    .enableMultiInstanceInvalidation()
                    .build();
        return INSTANCE;
    }
}


public class CartRepository {
    private Application application;
    private static CartRepository CartRepository;
    private CartDao mCartDao;

    private CartRepository(Application application) {
        this.application = application;
        AppDatabase db;
        db = AppDatabase.getInstance(application);
        mCartDao = db.mCartDao();
    }
    public synchronized static CartRepository getInstance(Application application) {
        if (CartRepository == null) {
            CartRepository = new CartRepository(application);
        }
        return CartRepository;
    }
    public void addCart(Cart cart) {
        InsertAsyncTask task = new InsertAsyncTask(mCartDao);
        task.execute(cart);
    }
    public List<Cart> getCartList() throws ExecutionException, InterruptedException {
        return new GetAllCartAsyncTask(mCartDao).execute().get();
    }
    private static class InsertAsyncTask extends AsyncTask<Cart, Void, Void> {
        private CartDao asyncTaskDao;
        InsertAsyncTask(CartDao dao) {
            asyncTaskDao = dao;
        }
        @Override
        protected Void doInBackground(final Cart... result) {
            asyncTaskDao.addCart(result[0]);
            return null;
        }
    }
    private static class GetAllCartAsyncTask extends AsyncTask<Void, Void, List<Cart>> {
        private CartDao asyncTaskDao;
        GetAllCartAsyncTask(CartDao dao) {
            asyncTaskDao = dao;
        }
        @Override
        protected List<Cart> doInBackground(Void... voids) {
            return asyncTaskDao.getCartList();
        }
    }
}

第一个片段

mCartRepository = CartRepository.getInstance(getActivity().getApplication());
    mCartRepository .addCart(cart);

第二片段

mCartRepository = CartRepository.getInstance(getActivity().getApplication());
List<Cart> cartList = mCartRepository.getCartList();
// cartList.size is 0 after inserting, only after start fragment again it shows data
                if (cartList.size() > 0) {
                    mList.addAll(cartList);
                    item_id = cartList.get(0).getItem_id(); 
                } 

标签: android

解决方案


推荐阅读