目前没有太多的文档来理解runInTransaction()方法的工作原理。当在不同的DAO上执行多个操作时,如果不需要返回值,可以使用runInTransaction(Runnable body)
;如果需要返回任何结果,则可以使用runInTransaction(Callable<V> body)
。
我的疑问: 如果事务中的所有查询都成功,则我希望返回一个图像对象,该对象需要在成功事务后上传到服务器。 如果发生任何异常或事务未成功,则我需要返回一个布尔值false,表示用户发生了一些错误。
以下是方法:
public boolean userCheckedIn(final User user) {
try {
appDatabase.runInTransaction(new Callable<Object>() {
@Override
public Object call() throws Exception {
if (user != null) {
//Add entry in table A
appDatabase.UserDao().add(user);
//Update entry in table B
//Delete an entry from table C
Event image = updateUserAction(action);
return image;
}
return null;
}
});
} catch (Exception e) {
return false;
}
return true;
}
在上述方法中,我的意图是,如果所有的数据库操作都成功,我需要返回一张图片,这张图片将被上传到服务器。如果在执行数据库事务时出现任何异常或错误,我需要返回
false
,以让用户知道出现了错误。不确定我是否理解正确。另外,我应该把runInTransaction放在try catch块中吗?