如何将多个greenDAO Tx操作组合成一个事务?

mid*_*ght 6 android greendao

我的应用程序使用远程REST API并使用greenDao填充本地数据库.我有AsyncTask类的服务:

@Override
protected Void doInBackground(Void... params) {
    insert100RowsIntheFirstTable();
    insert100RowsIntheSecondTable();
}
Run Code Online (Sandbox Code Playgroud)

在每个insert-method中我都有insertOrReplaceInTx,我主要用它来提高性能.

如果任何方法无法检索数据,我需要放弃结果.它应该通过同一个交易来完成.

我不知道这是正确的包围我的镶嵌方法与要求mDaoSession.callInTx(callable),同时具有insertOrReplaceInTx方法里面.我对吗?

另外,如果引发异常,我如何放弃交易 - 是否通过greenDao自动完成?

Mar*_*ger 9

是的,如果您的代码可以抛出异常,请使用callInTx(如果不是,您也可以考虑runInTx.Android的SQLite API负责那些"嵌套"事务.

毕竟,如果您查看源代码,callInTx只是一些方便的方法:

public <V> V callInTx(Callable<V> callable) throws Exception {
    db.beginTransaction();
    try {
        V result = callable.call();
        db.setTransactionSuccessful();
        return result;
    } finally {
        db.endTransaction();
    }
}
Run Code Online (Sandbox Code Playgroud)