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