Android Sqlbrite同时运行insert和查询操作,查询将得到空结果

Android Sqlbrite同时运行insert和查询操作,查询将得到空结果,android,rx-java,rx-java2,rx-android,sqlbrite,Android,Rx Java,Rx Java2,Rx Android,Sqlbrite,该应用程序在同一活动中有两个片段。片段A有一个按钮,然后按下按钮将启动一个并行任务,该任务将在数据库中插入或更新大量记录。片段B包括一个ViewPager,ViewPager正在使用FragmentStatePagerAdapter和保存的片段C,每个页面将查询并显示数据库中的记录 片段B将正常工作,直到按下片段A中的按钮。之后,ViewPager中的随机页面将无法正常工作。当记录存在时,某些页面将查询空记录。有两种情况 第一种情况,片段A将具有插入和更新操作。这是最坏的情况,一些specify

该应用程序在同一活动中有两个片段。片段A有一个按钮,然后按下按钮将启动一个并行任务,该任务将在数据库中插入或更新大量记录。片段B包括一个
ViewPager
ViewPager
正在使用
FragmentStatePagerAdapter
和保存的片段C,每个页面将查询并显示数据库中的记录

片段B将正常工作,直到按下片段A中的按钮。之后,ViewPager中的随机页面将无法正常工作。当记录存在时,某些页面将查询空记录。有两种情况

第一种情况,片段A将具有插入和更新操作。这是最坏的情况,一些specify记录在片段C中会得到一个空结果,即使滑动
ViewPager
重新打开指定的页面,该记录仍然是空的,直到片段a中的并行任务完成并重新打开片段B,那么片段C可以再次正常工作

第二种情况是,片段A将有插入和查询操作,而没有更新操作。这种情况下不会得到空结果,但某些指定记录将被卡住,直到片段a中的并行任务完成

是什么导致了这些问题?
提前感谢您。

我不确定,但我认为您需要在片段A中对数据库操作使用事务处理。 从片段A在数据库中插入或更新数据时,需要使用以下方法:

database.beginTransaction();
database.setTransactionSuccessful();
database.endTransaction();
请检查此链接以获取有关此方法和使用的详细说明。

谢谢您的回答。因为我正在将
SqlBrite
ContentResolver
一起使用,所以我不能直接使用事务。我可以使用
ContentResolver.bulkInsert()
ContentResolver.applyBatch()
插入数据,我选择
ContentResolver.bulkInsert()
插入大量数据。但是我不能使用
ContentResolver.applyBatch()
来更新数据,因为我需要使用update或query操作符来检查记录是否存在,使用结果来决定记录是否需要插入数据库。虽然我使用了
ContentResolver.bulkInsert()
,但问题仍然存在。