android - 在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();
}
解决方案
推荐阅读
- asp.net - 使用适用于移动设备的 Jquery 主题滚轮调整移动视图的图标大小
- apache - 如何通过带有服务器名称的公共 IP 访问 Apache 网站?
- java - 使用 Junit 的 TriangleTest:不允许使用 void 类型
- java - 播放和停止按钮不能一起使用
- javascript - 这个 JavaScript 注入(基于 DOM)是真的还是假阳性?
- asp.net-core - 使用 ASP.NET Core 应用程序将各种文件保存在数据库中
- python - django w/uwsgi 致命 Python 错误:initfsencoding:无法获取语言环境编码
- python - Boost:致命错误 LNK1104:无法打开文件(lib)
- sql-server - 有没有办法从 Entity Framework Core 的层次结构表中获取 First() ?
- prolog - 有没有办法在 Prolog 中扩展爱因斯坦的谜语?