在另一个活动中的select查询中未找到成功插入的Android-RoomDb-实体
我有一个实体(Kotlin代码): 下面是相应的Dao类:在另一个活动中的select查询中未找到成功插入的Android-RoomDb-实体,android,kotlin,android-room,Android,Kotlin,Android Room,我有一个实体(Kotlin代码): 下面是相应的Dao类: @Dao public interface ClientDao { @Query("SELECT * FROM Client where guid = :clientGUID LIMIT 1") Client getClient(String clientGUID); @Query("SELECT * FROM Client where agentGuid = :agentGUID") List<
@Dao
public interface ClientDao {
@Query("SELECT * FROM Client where guid = :clientGUID LIMIT 1")
Client getClient(String clientGUID);
@Query("SELECT * FROM Client where agentGuid = :agentGUID")
List<Client> getClients(String agentGUID);
@Insert
void insertClient(Client client);
}
成功后,我调用下面的代码跳回ClientActivity
:
@Override
public void clientUpdated(@NotNull Client client) {
Intent clientsActivity = new Intent(this,ClientActivity.class);
clientsActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP );
clientsActivity.putExtra(IntentKeysKt.getShouldRefreshData(), true);
startActivity(clientsActivity);
}
我的问题是-当我在onResume()的ClientActivity
方法中启动select查询时,它没有返回插入的实体。
代码如下:
private void displayClients()
{
Intent intent = getIntent();
boolean shouldRefreshData = intent.getBooleanExtra(IntentKeysKt.getShouldRefreshData(),false);
Toast.makeText(this, "shouldRefreshData="+shouldRefreshData, Toast.LENGTH_SHORT).show();
if (shouldRefreshData) {
//Load data from clients table
intent.putExtra(IntentKeysKt.getShouldRefreshData(), false);
ClientsRetrievalTask clientsRetrievalTask = new ClientsRetrievalTask(this);
clientsRetrievalTask.execute(agentGUID);
}
}
@Override
public void clientsRetrieved(@NotNull List<Client> clients) {
clientsAdapter.refresh(new ArrayList<>(clients));
recyclerViewClients.setVisibility(View.VISIBLE);
frameLayoutPlaceholderFragment.setVisibility(View.INVISIBLE);
}
private void displayClients()
{
Intent=getIntent();
boolean shouldRefreshData=intent.getBooleanExtra(IntentKeysKt.getShouldRefreshData(),false);
Toast.makeText(这是“shouldRefreshData=“+shouldRefreshData,Toast.LENGTH_SHORT).show();
如果(应刷新数据){
//从clients表加载数据
intent.putExtra(IntentKeysKt.getShouldRefreshData(),false);
ClientsRetrievalTask ClientsRetrievalTask=新的ClientsRetrievalTask(此);
clientsRetrievalTask.execute(agentGUID);
}
}
@凌驾
已检索公共无效客户端(@NotNull列表客户端){
刷新(新的ArrayList(客户端));
recycleServiceClient.setVisibility(View.VISIBLE);
frameLayoutPlaceholderFragment.setVisibility(View.INVISIBLE);
}
令人惊讶的是,下次应用程序启动时,它会显示插入的记录。我不懂,请引导我。你应该使用
插入操作之前,请先执行数据库.beginTransaction()
Database.setTransactionSuccessful()
插入操作后Database.endTransaction()
最后private static void insertData(AppDatabase db, List<ProductEntity> products, List<CommentEntity> comments) {
db.beginTransaction();
try {
db.productDao().insertAll(products);
db.commentDao().insertAll(comments);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
}
private static void insertData(AppDatabase db、列表产品、列表注释){
db.beginTransaction();
试一试{
db.productDao().insertAll(产品);
db.commentDao().insertAll(注释);
db.setTransactionSuccessful();
}最后{
db.endTransaction();
}
}
您如何知道交易中是否发生错误?
@Override
public void clientUpdated(@NotNull Client client) {
Intent clientsActivity = new Intent(this,ClientActivity.class);
clientsActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP );
clientsActivity.putExtra(IntentKeysKt.getShouldRefreshData(), true);
startActivity(clientsActivity);
}
private void displayClients()
{
Intent intent = getIntent();
boolean shouldRefreshData = intent.getBooleanExtra(IntentKeysKt.getShouldRefreshData(),false);
Toast.makeText(this, "shouldRefreshData="+shouldRefreshData, Toast.LENGTH_SHORT).show();
if (shouldRefreshData) {
//Load data from clients table
intent.putExtra(IntentKeysKt.getShouldRefreshData(), false);
ClientsRetrievalTask clientsRetrievalTask = new ClientsRetrievalTask(this);
clientsRetrievalTask.execute(agentGUID);
}
}
@Override
public void clientsRetrieved(@NotNull List<Client> clients) {
clientsAdapter.refresh(new ArrayList<>(clients));
recyclerViewClients.setVisibility(View.VISIBLE);
frameLayoutPlaceholderFragment.setVisibility(View.INVISIBLE);
}
private static void insertData(AppDatabase db, List<ProductEntity> products, List<CommentEntity> comments) {
db.beginTransaction();
try {
db.productDao().insertAll(products);
db.commentDao().insertAll(comments);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
}