diff --git a/app/build.gradle b/app/build.gradle index c41486c..392a7b1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,11 +16,13 @@ android { } +def dbflow_version = "3.1.1" + dependencies { - apt 'com.raizlabs.android:DBFlow-Compiler:2.1.0' - compile "com.raizlabs.android:DBFlow-Core:2.1.0" - compile "com.raizlabs.android:DBFlow:2.1.0" + apt "com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}" + compile "com.github.Raizlabs.DBFlow:dbflow-core:${dbflow_version}" + compile "com.github.Raizlabs.DBFlow:dbflow:${dbflow_version}" // This switches to a local copy of the DBFlow repo //apt project(':Libraries:DBFlow:compiler') diff --git a/app/src/main/java/com/raizlabs/android/databasecomparison/MainApplication.java b/app/src/main/java/com/raizlabs/android/databasecomparison/MainApplication.java index 14fdf3b..0fb2c96 100644 --- a/app/src/main/java/com/raizlabs/android/databasecomparison/MainApplication.java +++ b/app/src/main/java/com/raizlabs/android/databasecomparison/MainApplication.java @@ -8,6 +8,7 @@ import com.raizlabs.android.databasecomparison.activeandroid.AddressItem; import com.raizlabs.android.databasecomparison.activeandroid.Contact; import com.raizlabs.android.databasecomparison.activeandroid.SimpleAddressItem; +import com.raizlabs.android.dbflow.config.FlowConfig; import com.raizlabs.android.dbflow.config.FlowManager; import io.realm.Realm; @@ -38,7 +39,7 @@ public void onCreate() { .setLogLevel(Ollie.LogLevel.FULL) .init(); - FlowManager.init(this); + FlowManager.init(new FlowConfig.Builder(this).build()); Sprinkles.init(this, "sprinkles.db", 2); diff --git a/app/src/main/java/com/raizlabs/android/databasecomparison/activeandroid/AATester.java b/app/src/main/java/com/raizlabs/android/databasecomparison/activeandroid/AATester.java index 4ff08a8..801d475 100644 --- a/app/src/main/java/com/raizlabs/android/databasecomparison/activeandroid/AATester.java +++ b/app/src/main/java/com/raizlabs/android/databasecomparison/activeandroid/AATester.java @@ -1,6 +1,7 @@ package com.raizlabs.android.databasecomparison.activeandroid; import android.content.Context; +import android.database.sqlite.SQLiteDatabase; import com.activeandroid.ActiveAndroid; import com.activeandroid.query.Delete; @@ -10,7 +11,6 @@ import com.raizlabs.android.databasecomparison.MainActivity; import com.raizlabs.android.databasecomparison.Saver; import com.raizlabs.android.databasecomparison.events.LogTestDataEvent; -import com.raizlabs.android.dbflow.runtime.TransactionManager; import java.util.Collection; @@ -34,12 +34,15 @@ public static void testAddressBooks(Context context) { MainActivity.ADDRESS_BOOK_COUNT); long startTime = System.currentTimeMillis(); final Collection finalAddressBooks = addressBooks; - TransactionManager.transact(ActiveAndroid.getDatabase(), new Runnable() { - @Override - public void run() { - Saver.saveAll(finalAddressBooks); - } - }); + SQLiteDatabase database = ActiveAndroid.getDatabase(); + database.beginTransaction(); + try { + Saver.saveAll(finalAddressBooks); + database.setTransactionSuccessful(); + } finally { + database.endTransaction(); + } + EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.SAVE_TIME)); startTime = System.currentTimeMillis(); @@ -59,13 +62,14 @@ public static void testAddressItems(Context context) { Generator.getAddresses(SimpleAddressItem.class, MainActivity.LOOP_COUNT); long startTime = System.currentTimeMillis(); - // Reuse method so we don't have to write - TransactionManager.transact(ActiveAndroid.getDatabase(), new Runnable() { - @Override - public void run() { - Saver.saveAll(activeAndroidModels); - } - }); + SQLiteDatabase database = ActiveAndroid.getDatabase(); + database.beginTransaction(); + try { + Saver.saveAll(activeAndroidModels); + database.setTransactionSuccessful(); + } finally { + database.endTransaction(); + } EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.SAVE_TIME)); startTime = System.currentTimeMillis(); diff --git a/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/AddressBook.java b/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/AddressBook.java index 8a65713..61baedf 100644 --- a/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/AddressBook.java +++ b/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/AddressBook.java @@ -1,23 +1,25 @@ package com.raizlabs.android.databasecomparison.dbflow; -import com.raizlabs.android.databasecomparison.interfaces.IAddressBook; import com.raizlabs.android.databasecomparison.MainActivity; +import com.raizlabs.android.databasecomparison.interfaces.IAddressBook; import com.raizlabs.android.dbflow.annotation.Column; import com.raizlabs.android.dbflow.annotation.ModelContainer; +import com.raizlabs.android.dbflow.annotation.OneToMany; import com.raizlabs.android.dbflow.annotation.PrimaryKey; import com.raizlabs.android.dbflow.annotation.Table; -import com.raizlabs.android.dbflow.sql.builder.Condition; -import com.raizlabs.android.dbflow.sql.language.Select; -import com.raizlabs.android.dbflow.structure.cache.BaseCacheableModel; +import com.raizlabs.android.dbflow.sql.language.SQLite; +import com.raizlabs.android.dbflow.structure.BaseModel; import java.util.Collection; /** * Description: */ -@Table(tableName = "AddressBook", databaseName = DBFlowDatabase.NAME) +@Table(name = "AddressBook", database = DBFlowDatabase.class, + cacheSize = MainActivity.ADDRESS_BOOK_COUNT, + orderedCursorLookUp = true) @ModelContainer -public class AddressBook extends BaseCacheableModel implements IAddressBook { +public class AddressBook extends BaseModel implements IAddressBook { @PrimaryKey(autoincrement = true) @Column @@ -50,16 +52,20 @@ public void setAddresses(Collection addresses) { this.addresses = addresses; } + @OneToMany(methods = OneToMany.Method.ALL) public Collection getAddresses() { if (addresses == null) { - addresses = new Select().from(AddressItem.class).where(Condition.column(AddressItem$Table.ADDRESSBOOK_ADDRESSBOOK).is(id)).queryList(); + addresses = SQLite.select().from(AddressItem.class) + .where(AddressItem_Table.addressBook.is(id)).queryList(); } return addresses; } + @OneToMany(methods = OneToMany.Method.ALL) public Collection getContacts() { if (contacts == null) { - contacts = new Select().from(Contact.class).where(Condition.column(Contact$Table.ADDRESSBOOK_ADDRESSBOOK).is(id)).queryList(); + contacts = SQLite.select().from(Contact.class) + .where(Contact_Table.addressBook.is(id)).queryList(); } return contacts; } @@ -79,9 +85,4 @@ public void saveAll() { } } - @Override - public int getCacheSize() { - return MainActivity.ADDRESS_BOOK_COUNT; - } - } \ No newline at end of file diff --git a/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/AddressItem.java b/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/AddressItem.java index d0ea2b7..9fd2273 100644 --- a/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/AddressItem.java +++ b/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/AddressItem.java @@ -6,16 +6,14 @@ import com.raizlabs.android.dbflow.annotation.ForeignKeyReference; import com.raizlabs.android.dbflow.annotation.PrimaryKey; import com.raizlabs.android.dbflow.annotation.Table; +import com.raizlabs.android.dbflow.config.FlowManager; import com.raizlabs.android.dbflow.structure.BaseModel; import com.raizlabs.android.dbflow.structure.container.ForeignKeyContainer; -import java.util.LinkedHashMap; -import java.util.Map; - /** * Description: */ -@Table(databaseName = DBFlowDatabase.NAME) +@Table(database = DBFlowDatabase.class, orderedCursorLookUp = true) public class AddressItem extends BaseModel implements IAddressItem { @PrimaryKey(autoincrement = true) @@ -37,7 +35,6 @@ public class AddressItem extends BaseModel implements IAddressItem @Column(name = "phone") long phone; - @Override public void setName(String name) { this.name = name; @@ -69,7 +66,9 @@ public void saveAll() { } @ForeignKey( - references = {@ForeignKeyReference(columnName = "addressBook", columnType = long.class, foreignColumnName = "id")}, + references = {@ForeignKeyReference(columnName = "addressBook", + columnType = long.class, + foreignKeyColumnName = "id")}, saveForeignKeyModel = false) @Column ForeignKeyContainer addressBook; @@ -77,9 +76,7 @@ public void saveAll() { @Override public void setAddressBook(AddressBook addressBook) { - this.addressBook = new ForeignKeyContainer<>(AddressBook.class); - Map keys = new LinkedHashMap<>(); - keys.put(AddressBook$Table.ID, addressBook.id); - this.addressBook.setData(keys); + this.addressBook = FlowManager.getContainerAdapter(AddressBook.class) + .toForeignKeyContainer(addressBook); } } diff --git a/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/Contact.java b/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/Contact.java index 7cf5665..bc20538 100644 --- a/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/Contact.java +++ b/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/Contact.java @@ -6,20 +6,17 @@ import com.raizlabs.android.dbflow.annotation.ForeignKeyReference; import com.raizlabs.android.dbflow.annotation.PrimaryKey; import com.raizlabs.android.dbflow.annotation.Table; +import com.raizlabs.android.dbflow.config.FlowManager; import com.raizlabs.android.dbflow.structure.BaseModel; import com.raizlabs.android.dbflow.structure.container.ForeignKeyContainer; -import java.util.LinkedHashMap; -import java.util.Map; - /** * Description: */ -@Table(tableName = "contact", databaseName = DBFlowDatabase.NAME) +@Table(name = "contact", database = DBFlowDatabase.class, orderedCursorLookUp = true) public class Contact extends BaseModel implements IContact { @PrimaryKey(autoincrement = true) - @Column long id; @Column(name = "name") @@ -28,10 +25,11 @@ public class Contact extends BaseModel implements IContact { @Column(name = "email") String email; - @ForeignKey(references = {@ForeignKeyReference(columnName = "addressBook", - foreignColumnName = "id", columnType = long.class)}, - saveForeignKeyModel = false) - @Column + @ForeignKey(references = + {@ForeignKeyReference(columnName = "addressBook", + foreignKeyColumnName = "id", + columnType = long.class)}, + saveForeignKeyModel = false) ForeignKeyContainer addressBook; @Override @@ -61,11 +59,8 @@ public AddressBook getAddressBookField() { @Override public void setAddressBook(AddressBook addressBook) { - this.addressBook = new ForeignKeyContainer<>(AddressBook.class); - Map keys = new LinkedHashMap<>(); - keys.put(AddressBook$Table.ID, addressBook.id); - this.addressBook.setData(keys); - this.addressBook.setModel(addressBook); + this.addressBook = FlowManager.getContainerAdapter(AddressBook.class) + .toForeignKeyContainer(addressBook); } @Override diff --git a/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/DBFlowTester.java b/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/DBFlowTester.java index d5d813b..9674064 100644 --- a/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/DBFlowTester.java +++ b/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/DBFlowTester.java @@ -3,12 +3,15 @@ import android.content.Context; import com.raizlabs.android.databasecomparison.Generator; -import com.raizlabs.android.databasecomparison.Loader; import com.raizlabs.android.databasecomparison.MainActivity; -import com.raizlabs.android.databasecomparison.Saver; import com.raizlabs.android.databasecomparison.events.LogTestDataEvent; -import com.raizlabs.android.dbflow.runtime.TransactionManager; +import com.raizlabs.android.dbflow.config.FlowManager; +import com.raizlabs.android.dbflow.sql.language.Delete; +import com.raizlabs.android.dbflow.sql.language.SQLite; import com.raizlabs.android.dbflow.sql.language.Select; +import com.raizlabs.android.dbflow.structure.database.DatabaseWrapper; +import com.raizlabs.android.dbflow.structure.database.transaction.FastStoreModelTransaction; +import com.raizlabs.android.dbflow.structure.database.transaction.ITransaction; import java.util.Collection; @@ -21,8 +24,7 @@ public class DBFlowTester { public static final String FRAMEWORK_NAME = "DBFlow"; public static void testAddressBooks(Context context) { - com.raizlabs.android.dbflow.sql.language.Delete.tables(AddressItem.class, - Contact.class, AddressBook.class); + Delete.tables(AddressItem.class, Contact.class, AddressBook.class); Collection addressBooks = Generator.createAddressBooks(AddressBook.class, Contact.class, AddressItem.class, @@ -30,42 +32,44 @@ public static void testAddressBooks(Context context) { long startTime = System.currentTimeMillis(); final Collection finalAddressBooks = addressBooks; - TransactionManager.transact(DBFlowDatabase.NAME, new Runnable() { - @Override - public void run() { - Saver.saveAll(finalAddressBooks); - } - }); + FlowManager.getDatabase(DBFlowDatabase.class) + .executeTransaction(new ITransaction() { + @Override + public void execute(DatabaseWrapper databaseWrapper) { + for (AddressBook addressBook : finalAddressBooks) { + addressBook.insert(); + } + } + }); EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.SAVE_TIME)); startTime = System.currentTimeMillis(); - addressBooks = new Select().from(AddressBook.class).queryList(); - Loader.loadAllInnerData(addressBooks); + addressBooks = SQLite.select().from(AddressBook.class).queryList(); + EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.LOAD_TIME)); - com.raizlabs.android.dbflow.sql.language.Delete.tables(AddressItem.class, - Contact.class, AddressBook.class); + Delete.tables(AddressItem.class, + Contact.class, AddressBook.class); } public static void testAddressItems(Context context) { - com.raizlabs.android.dbflow.sql.language.Delete.table(SimpleAddressItem.class); + Delete.table(SimpleAddressItem.class); Collection dbFlowModels = Generator.getAddresses(SimpleAddressItem.class, MainActivity.LOOP_COUNT); long startTime = System.currentTimeMillis(); final Collection finalDbFlowModels = dbFlowModels; - TransactionManager.transact(DBFlowDatabase.NAME, new Runnable() { - @Override - public void run() { - Saver.saveAll(finalDbFlowModels); - } - }); + FlowManager.getDatabase(DBFlowDatabase.class) + .executeTransaction(FastStoreModelTransaction + .insertBuilder(FlowManager.getModelAdapter(SimpleAddressItem.class)) + .addAll(finalDbFlowModels) + .build()); EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.SAVE_TIME)); startTime = System.currentTimeMillis(); dbFlowModels = new Select().from(SimpleAddressItem.class).queryList(); EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.LOAD_TIME)); - com.raizlabs.android.dbflow.sql.language.Delete.table(SimpleAddressItem.class); + Delete.table(SimpleAddressItem.class); } } diff --git a/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/SimpleAddressItem.java b/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/SimpleAddressItem.java index 42ffaad..88b763f 100644 --- a/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/SimpleAddressItem.java +++ b/app/src/main/java/com/raizlabs/android/databasecomparison/dbflow/SimpleAddressItem.java @@ -1,20 +1,22 @@ package com.raizlabs.android.databasecomparison.dbflow; -import com.raizlabs.android.databasecomparison.interfaces.IAddressItem; import com.raizlabs.android.databasecomparison.MainActivity; +import com.raizlabs.android.databasecomparison.interfaces.IAddressItem; import com.raizlabs.android.dbflow.annotation.Column; import com.raizlabs.android.dbflow.annotation.PrimaryKey; import com.raizlabs.android.dbflow.annotation.Table; -import com.raizlabs.android.dbflow.structure.cache.BaseCacheableModel; +import com.raizlabs.android.dbflow.structure.BaseModel; /** * Description: */ -@Table(databaseName = DBFlowDatabase.NAME) -public class SimpleAddressItem extends BaseCacheableModel implements IAddressItem { +@Table(database = DBFlowDatabase.class, + cachingEnabled = true, + cacheSize = MainActivity.LOOP_COUNT, + orderedCursorLookUp = true) +public class SimpleAddressItem extends BaseModel implements IAddressItem { @PrimaryKey(autoincrement = true) - @Column long id; @Column(name = "name") @@ -67,8 +69,4 @@ public void saveAll() { super.insert(); } - @Override - public int getCacheSize() { - return MainActivity.LOOP_COUNT; - } } diff --git a/app/src/main/java/com/raizlabs/android/databasecomparison/ollie/OllieTester.java b/app/src/main/java/com/raizlabs/android/databasecomparison/ollie/OllieTester.java index def5ef6..be30e0b 100644 --- a/app/src/main/java/com/raizlabs/android/databasecomparison/ollie/OllieTester.java +++ b/app/src/main/java/com/raizlabs/android/databasecomparison/ollie/OllieTester.java @@ -1,13 +1,13 @@ package com.raizlabs.android.databasecomparison.ollie; import android.content.Context; +import android.database.sqlite.SQLiteDatabase; import com.raizlabs.android.databasecomparison.Generator; import com.raizlabs.android.databasecomparison.Loader; import com.raizlabs.android.databasecomparison.MainActivity; import com.raizlabs.android.databasecomparison.Saver; import com.raizlabs.android.databasecomparison.events.LogTestDataEvent; -import com.raizlabs.android.dbflow.runtime.TransactionManager; import java.util.Collection; @@ -19,60 +19,60 @@ /** * Created by Tjones on 8/16/15. */ -public class OllieTester -{ - public static final String FRAMEWORK_NAME = "Ollie"; +public class OllieTester { + public static final String FRAMEWORK_NAME = "Ollie"; - public static void testAddressBooks(Context context) { - Delete.from(AddressItem.class).execute(); - Delete.from(Contact.class).execute(); - Delete.from(AddressBook.class).execute(); + public static void testAddressBooks(Context context) { + Delete.from(AddressItem.class).execute(); + Delete.from(Contact.class).execute(); + Delete.from(AddressBook.class).execute(); - Collection addressBooks = Generator.createAddressBooks(AddressBook.class, Contact.class, AddressItem.class, MainActivity.ADDRESS_BOOK_COUNT); + Collection addressBooks = Generator.createAddressBooks(AddressBook.class, Contact.class, AddressItem.class, MainActivity.ADDRESS_BOOK_COUNT); - long startTime = System.currentTimeMillis(); - final Collection finalAddressBooks = addressBooks; - TransactionManager.transact(Ollie.getDatabase(), new Runnable() - { - @Override - public void run() - { - Saver.saveAll(finalAddressBooks); - } - }); - EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.SAVE_TIME)); + long startTime = System.currentTimeMillis(); + final Collection finalAddressBooks = addressBooks; + SQLiteDatabase database = Ollie.getDatabase(); + database.beginTransaction(); + try { + Saver.saveAll(finalAddressBooks); + database.setTransactionSuccessful(); + } finally { + database.endTransaction(); + } + EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.SAVE_TIME)); - startTime = System.currentTimeMillis(); - addressBooks = Select.from(AddressBook.class).fetch(); - Loader.loadAllInnerData(addressBooks); - EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.LOAD_TIME)); + startTime = System.currentTimeMillis(); + addressBooks = Select.from(AddressBook.class).fetch(); + Loader.loadAllInnerData(addressBooks); + EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.LOAD_TIME)); - Delete.from(AddressItem.class).execute(); - Delete.from(Contact.class).execute(); - Delete.from(AddressBook.class).execute(); - } + Delete.from(AddressItem.class).execute(); + Delete.from(Contact.class).execute(); + Delete.from(AddressBook.class).execute(); + } - public static void testAddressItems(Context context) { - Delete.from(SimpleAddressItem.class).execute(); + public static void testAddressItems(Context context) { + Delete.from(SimpleAddressItem.class).execute(); - final Collection ollieModels = - Generator.getAddresses(SimpleAddressItem.class, MainActivity.LOOP_COUNT); + final Collection ollieModels = + Generator.getAddresses(SimpleAddressItem.class, MainActivity.LOOP_COUNT); - long startTime = System.currentTimeMillis(); - // Reuse method so we don't have to write - TransactionManager.transact(Ollie.getDatabase(), new Runnable() { - @Override - public void run() { - Saver.saveAll(ollieModels); - } - }); - EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.SAVE_TIME)); + long startTime = System.currentTimeMillis(); + SQLiteDatabase database = Ollie.getDatabase(); + database.beginTransaction(); + try { + Saver.saveAll(ollieModels); + database.setTransactionSuccessful(); + } finally { + database.endTransaction(); + } + EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.SAVE_TIME)); - startTime = System.currentTimeMillis(); - Collection activeAndroidModelLoad = - Select.from(SimpleAddressItem.class).fetch(); - EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.LOAD_TIME)); + startTime = System.currentTimeMillis(); + Collection activeAndroidModelLoad = + Select.from(SimpleAddressItem.class).fetch(); + EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.LOAD_TIME)); - Delete.from(SimpleAddressItem.class).execute(); - } + Delete.from(SimpleAddressItem.class).execute(); + } } diff --git a/app/src/main/java/com/raizlabs/android/databasecomparison/sugar/SugarTester.java b/app/src/main/java/com/raizlabs/android/databasecomparison/sugar/SugarTester.java index 2aa819a..98bdda9 100644 --- a/app/src/main/java/com/raizlabs/android/databasecomparison/sugar/SugarTester.java +++ b/app/src/main/java/com/raizlabs/android/databasecomparison/sugar/SugarTester.java @@ -1,6 +1,7 @@ package com.raizlabs.android.databasecomparison.sugar; import android.content.Context; +import android.database.sqlite.SQLiteDatabase; import com.raizlabs.android.databasecomparison.Generator; import com.raizlabs.android.databasecomparison.Loader; @@ -8,7 +9,6 @@ import com.raizlabs.android.databasecomparison.MainApplication; import com.raizlabs.android.databasecomparison.Saver; import com.raizlabs.android.databasecomparison.events.LogTestDataEvent; -import com.raizlabs.android.dbflow.runtime.TransactionManager; import java.util.Collection; @@ -29,12 +29,15 @@ public static void testAddressBooks(Context context) { Contact.class, AddressItem.class, MainActivity.ADDRESS_BOOK_COUNT); long startTime = System.currentTimeMillis(); final Collection finalAddressBooks = addressBooks; - TransactionManager.transact(MainApplication.getSugarDatabase().getDB(), new Runnable() { - @Override - public void run() { - Saver.saveAll(finalAddressBooks); - } - }); + + SQLiteDatabase database = MainApplication.getSugarDatabase().getDB(); + database.beginTransaction(); + try { + Saver.saveAll(finalAddressBooks); + database.setTransactionSuccessful(); + } finally { + database.endTransaction(); + } EventBus.getDefault().post(new LogTestDataEvent(startTime, FRAMEWORK_NAME, MainActivity.SAVE_TIME)); startTime = System.currentTimeMillis();