在另一个活动中的select查询中未找到成功插入的Android-RoomDb-实体

在另一个活动中的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<

我有一个实体(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<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();
        }
    }