我的应用程序使用远程REST API并使用greenDao填充本地数据库。我有AsyncTask类的服务:
@Override
protected Void doInBackground(Void... params) {
insert100RowsIntheFirstTable();
insert100RowsIntheSecondTable();
}
在每个insert-method中我都有insertOrReplaceInTx,我主要用它来提高性能。
如果任何方法无法检索数据,我需要放弃结果。它应该通过相同的交易来完成。
我想知道在方法中使用mDaoSession.callInTx(callable)
时用insertOrReplaceInTx
包围我的插入方法调用是否正确。我是对的吗?
此外,如果引发异常,我如何放弃交易 - 是否通过greenDao自动完成?
答案 0 :(得分: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();
}
}