Closing a cursor from task provider, abstract database catch error

pull/14/head
Tim Su 16 years ago
parent cb09991e2d
commit 5aa270a347

@ -9,7 +9,6 @@ import android.content.ContentValues;
import android.content.Context; import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.util.Log; import android.util.Log;
@ -112,15 +111,15 @@ abstract public class AbstractDatabase {
try { try {
database = helper.getWritableDatabase(); database = helper.getWritableDatabase();
} catch (SQLiteException writeException) { } catch (final RuntimeException original) {
Log.e("database-" + getName(), "Error opening db", Log.e("database-" + getName(), "Error opening db",
writeException); original);
try { try {
// provide read-only database // provide read-only database
openForReading(); openForReading();
} catch (SQLiteException readException) { } catch (Exception readException) {
// throw original write exception // throw original write exception
throw writeException; throw original;
} }
} }
} }

@ -175,33 +175,35 @@ public class Astrid2TaskProvider extends ContentProvider {
TodorooCursor<Task> cursor = taskService.query(Query.select(Task.ID, Task.TITLE, TodorooCursor<Task> cursor = taskService.query(Query.select(Task.ID, Task.TITLE,
Task.IMPORTANCE, Task.DUE_DATE).where(TaskCriteria.isActive()). Task.IMPORTANCE, Task.DUE_DATE).where(TaskCriteria.isActive()).
orderBy(TaskService.defaultTaskOrder()).limit(MAX_NUMBER_OF_TASKS)); orderBy(TaskService.defaultTaskOrder()).limit(MAX_NUMBER_OF_TASKS));
try {
int[] importanceColors = Task.getImportanceColors(ctx.getResources()); int[] importanceColors = Task.getImportanceColors(ctx.getResources());
Task task = new Task();
Task task = new Task(); for (int i = 0; i < cursor.getCount(); i++) {
for (int i = 0; i < cursor.getCount(); i++) { cursor.moveToNext();
cursor.moveToNext(); task.readFromCursor(cursor);
task.readFromCursor(cursor);
StringBuilder taskTags = new StringBuilder();
StringBuilder taskTags = new StringBuilder(); TodorooCursor<Metadata> tagCursor = TagService.getInstance().getTags(task.getId());
TodorooCursor<Metadata> tagCursor = TagService.getInstance().getTags(task.getId()); try {
try { for(tagCursor.moveToFirst(); !tagCursor.isAfterLast(); tagCursor.moveToNext())
for(tagCursor.moveToFirst(); !tagCursor.isAfterLast(); tagCursor.moveToNext()) taskTags.append(tagCursor.get(TagService.TAG)).append(TAG_SEPARATOR);
taskTags.append(tagCursor.get(TagService.TAG)).append(TAG_SEPARATOR); } finally {
} finally { tagCursor.close();
tagCursor.close(); }
}
Object[] values = new Object[7];
Object[] values = new Object[7]; values[0] = task.getValue(Task.TITLE);
values[0] = task.getValue(Task.TITLE); values[1] = importanceColors[task.getValue(Task.IMPORTANCE)];
values[1] = importanceColors[task.getValue(Task.IMPORTANCE)]; values[2] = task.getValue(Task.DUE_DATE);
values[2] = task.getValue(Task.DUE_DATE); values[3] = task.getValue(Task.DUE_DATE);
values[3] = task.getValue(Task.DUE_DATE); values[4] = task.getValue(Task.IMPORTANCE);
values[4] = task.getValue(Task.IMPORTANCE); values[5] = task.getId();
values[5] = task.getId(); values[6] = taskTags.toString();
values[6] = taskTags.toString();
ret.addRow(values);
ret.addRow(values); }
} finally {
cursor.close();
} }
return ret; return ret;

Loading…
Cancel
Save