From 400728fc55c0341f9bc4e58988dac1fb9808735a Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Sat, 5 Dec 2015 19:50:17 +0100 Subject: [PATCH] don't crash when cleaning up empty DB. Fixes #107 --- .../android/habitica/MainActivity.java | 118 +++++++++--------- 1 file changed, 61 insertions(+), 57 deletions(-) diff --git a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java index 1956d2409..fe882db17 100644 --- a/Habitica/src/com/habitrpg/android/habitica/MainActivity.java +++ b/Habitica/src/com/habitrpg/android/habitica/MainActivity.java @@ -2,6 +2,7 @@ package com.habitrpg.android.habitica; import android.content.Intent; import android.content.SharedPreferences; +import android.database.sqlite.SQLiteDoneException; import android.graphics.Bitmap; import android.os.Bundle; import android.preference.PreferenceManager; @@ -284,50 +285,51 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU } Where query = new Select().from(Task.class).where(Condition.column("user_id").eq(userId)); + try { + if (query.count() != onlineEntries.size()) { - if (query.count() != onlineEntries.size()) { + // Load Database Tasks + query.async().queryList(new TransactionListener>() { + @Override + public void onResultReceived(List tasks) { - // Load Database Tasks - query.async().queryList(new TransactionListener>() { - @Override - public void onResultReceived(List tasks) { + ArrayList tasksToDelete = new ArrayList(); - ArrayList tasksToDelete = new ArrayList(); + for (Task dbTask : tasks) { + if (!onlineTaskIdList.contains(dbTask.getId())) { + tasksToDelete.add(dbTask); + } + } - for (Task dbTask : tasks) { - if (!onlineTaskIdList.contains(dbTask.getId())) { - tasksToDelete.add(dbTask); + for (Task delTask : tasksToDelete) { + // TaskTag + new Delete().from(TaskTag.class).where(Condition.column("task_id").eq(delTask.getId())).async().execute(); + + // ChecklistItem + new Delete().from(ChecklistItem.class).where(Condition.column("task_id").eq(delTask.getId())).async().execute(); + + // Days + new Delete().from(Days.class).where(Condition.column("task_id").eq(delTask.getId())).async().execute(); + + // TASK + delTask.async().delete(); + + EventBus.getDefault().post(new TaskRemovedEvent(delTask.getId())); } } - for (Task delTask : tasksToDelete) { - // TaskTag - new Delete().from(TaskTag.class).where(Condition.column("task_id").eq(delTask.getId())).async().execute(); - - // ChecklistItem - new Delete().from(ChecklistItem.class).where(Condition.column("task_id").eq(delTask.getId())).async().execute(); - - // Days - new Delete().from(Days.class).where(Condition.column("task_id").eq(delTask.getId())).async().execute(); - - // TASK - delTask.async().delete(); - - EventBus.getDefault().post(new TaskRemovedEvent(delTask.getId())); + @Override + public boolean onReady(BaseTransaction> baseTransaction) { + return false; } - } - @Override - public boolean onReady(BaseTransaction> baseTransaction) { - return false; - } - - @Override - public boolean hasResult(BaseTransaction> baseTransaction, List tasks) { - return tasks != null && tasks.size() > 0; - } - }); - } + @Override + public boolean hasResult(BaseTransaction> baseTransaction, List tasks) { + return tasks != null && tasks.size() > 0; + } + }); + } + } catch (SQLiteDoneException e) {} } private void loadAndRemoveOldChecklists(final List onlineEntries) { @@ -338,38 +340,40 @@ public class MainActivity extends InstabugAppCompatActivity implements HabitRPGU } From query = new Select().from(ChecklistItem.class); + try { + if (query.count() != onlineEntries.size()) { - if (query.count() != onlineEntries.size()) { + // Load Database Checklist items + query.async().queryList(new TransactionListener>() { + @Override + public void onResultReceived(List items) { - // Load Database Checklist items - query.async().queryList(new TransactionListener>() { - @Override - public void onResultReceived(List items) { + ArrayList checkListItemsToDelete = new ArrayList<>(); - ArrayList checkListItemsToDelete = new ArrayList<>(); + for (ChecklistItem chItem : items) { + if (!onlineChecklistItemIdList.contains(chItem.getId())) { + checkListItemsToDelete.add(chItem); + } + } - for (ChecklistItem chItem : items) { - if (!onlineChecklistItemIdList.contains(chItem.getId())) { - checkListItemsToDelete.add(chItem); + for (ChecklistItem chItem : checkListItemsToDelete) { + chItem.async().delete(); } } - for (ChecklistItem chItem : checkListItemsToDelete) { - chItem.async().delete(); + @Override + public boolean onReady(BaseTransaction> baseTransaction) { + return false; } - } - @Override - public boolean onReady(BaseTransaction> baseTransaction) { - return false; - } + @Override + public boolean hasResult(BaseTransaction> baseTransaction, List items) { + return items != null && items.size() > 0; + } + }); + } + } catch (SQLiteDoneException e) {} - @Override - public boolean hasResult(BaseTransaction> baseTransaction, List items) { - return items != null && items.size() > 0; - } - }); - } } private void updateUserAvatars() {