【问题标题】:DBFlow Transactions Overhaul - need to rewrite my codeDBFlow Transactions Overhaul - 需要重写我的代码
【发布时间】:2017-04-18 09:34:53
【问题描述】:
与新版本的 Raizlabs DBFlow 一样,管理数据库的方式已经改变。
现在,经过数小时的阅读/学习,我被逼到了墙角。我需要将旧版 DBFlow (3.0.0-beta5) 的两种方法重写为新版 (4.0.0-beta7):
public static void saveAll(Collection<? extends Model> models) {
TransactionManager.getInstance().addTransaction(new SaveModelTransaction<>(ProcessModelInfo.withModels(models)));
}
public static void deleteAll(Collection<? extends Model> models) {
TransactionManager.getInstance().addTransaction(new DeleteModelListTransaction<>(ProcessModelInfo.withModels(models)));
}
我看过这篇文章:https://github.com/Raizlabs/DBFlow/blob/master/usage2/Migration3Guide.md#transactions-overhaul 但我还是做不到。这是我第一次接触ORM,只是不太了解
【问题讨论】:
标签:
android
sqlite
orm
dbflow
【解决方案1】:
正确答案是:
public static void saveAll(final Collection<? extends Model> models) {
FlowManager.getDatabase(NAME)
.beginTransactionAsync(new ProcessModelTransaction.Builder<>(
new ProcessModelTransaction.ProcessModel<Model>() {
@Override
public void processModel(Model model, DatabaseWrapper wrapper) {
model.save();
}
}).addAll(models).build())
.error(new Transaction.Error() {
@Override
public void onError(Transaction transaction, Throwable error) {
}
})
.success(new Transaction.Success() {
@Override
public void onSuccess(Transaction transaction) {
}
}).build().execute();
}
和
public static void deleteAll(final Collection<? extends Model> models) {
FlowManager.getDatabase(NAME)
.beginTransactionAsync(new ProcessModelTransaction.Builder<>(
new ProcessModelTransaction.ProcessModel<Model>() {
@Override
public void processModel(Model model, DatabaseWrapper wrapper) {
model.delete();
}
}).addAll(models).build())
.error(new Transaction.Error() {
@Override
public void onError(Transaction transaction, Throwable error) {
}
})
.success(new Transaction.Success() {
@Override
public void onSuccess(Transaction transaction) {
}
}).build().execute();
}