Simplify error handling

This commit is contained in:
M66B 2020-06-15 16:10:20 +02:00
parent 6a9cfbf24d
commit 9a66d0716c
2 changed files with 31 additions and 91 deletions

View File

@ -114,38 +114,29 @@ public abstract class LimitOffsetDataSource<T> extends PositionalDataSource<T> {
int firstLoadPosition = 0;
RoomSQLiteQuery sqLiteQuery = null;
Cursor cursor = null;
int retry = 0;
while (cursor == null) {
mDb.beginTransaction();
try {
totalCount = countItems();
if (totalCount != 0) {
// bound the size requested, based on known count
firstLoadPosition = computeInitialLoadPosition(params, totalCount);
int firstLoadSize = computeInitialLoadSize(params, firstLoadPosition, totalCount);
mDb.beginTransaction();
try {
totalCount = countItems();
if (totalCount != 0) {
// bound the size requested, based on known count
firstLoadPosition = computeInitialLoadPosition(params, totalCount);
int firstLoadSize = computeInitialLoadSize(params, firstLoadPosition, totalCount);
sqLiteQuery = getSQLiteQuery(firstLoadPosition, firstLoadSize);
cursor = mDb.query(sqLiteQuery);
List<T> rows = convertRows(cursor);
mDb.setTransactionSuccessful();
list = rows;
}
} catch (Throwable ex) {
if (++retry > 10)
throw ex;
eu.faircode.email.Log.w(ex);
try {
Thread.sleep(3000L);
} catch (InterruptedException ignored) {
}
} finally {
if (cursor != null) {
cursor.close();
}
mDb.endTransaction();
if (sqLiteQuery != null) {
sqLiteQuery.release();
}
sqLiteQuery = getSQLiteQuery(firstLoadPosition, firstLoadSize);
cursor = mDb.query(sqLiteQuery);
List<T> rows = convertRows(cursor);
mDb.setTransactionSuccessful();
list = rows;
}
} catch (Throwable ex) {
eu.faircode.email.Log.w(ex);
} finally {
if (cursor != null) {
cursor.close();
}
mDb.endTransaction();
if (sqLiteQuery != null) {
sqLiteQuery.release();
}
}

View File

@ -1,5 +1,5 @@
--- /home/marcel/support/room/runtime/src/main/java/androidx/room/paging/LimitOffsetDataSource.java 2020-05-18 15:59:35.380887546 +0200
+++ /home/marcel/email/app/src/main/java/androidx/room/paging/LimitOffsetDataSource.java 2020-06-15 15:44:12.388117961 +0200
+++ /home/marcel/email/app/src/main/java/androidx/room/paging/LimitOffsetDataSource.java 2020-06-15 16:11:37.701097921 +0200
@@ -20,6 +20,7 @@ import android.database.Cursor;
import androidx.annotation.NonNull;
@ -19,63 +19,12 @@
private final RoomSQLiteQuery mSourceQuery;
private final String mCountQuery;
private final String mLimitOffsetQuery;
@@ -114,27 +114,38 @@ public abstract class LimitOffsetDataSou
int firstLoadPosition = 0;
RoomSQLiteQuery sqLiteQuery = null;
Cursor cursor = null;
- mDb.beginTransaction();
- try {
- totalCount = countItems();
- if (totalCount != 0) {
- // bound the size requested, based on known count
- firstLoadPosition = computeInitialLoadPosition(params, totalCount);
- int firstLoadSize = computeInitialLoadSize(params, firstLoadPosition, totalCount);
-
- sqLiteQuery = getSQLiteQuery(firstLoadPosition, firstLoadSize);
- cursor = mDb.query(sqLiteQuery);
- List<T> rows = convertRows(cursor);
- mDb.setTransactionSuccessful();
- list = rows;
- }
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- mDb.endTransaction();
- if (sqLiteQuery != null) {
- sqLiteQuery.release();
+ int retry = 0;
+ while (cursor == null) {
+ mDb.beginTransaction();
+ try {
+ totalCount = countItems();
+ if (totalCount != 0) {
+ // bound the size requested, based on known count
+ firstLoadPosition = computeInitialLoadPosition(params, totalCount);
+ int firstLoadSize = computeInitialLoadSize(params, firstLoadPosition, totalCount);
+
+ sqLiteQuery = getSQLiteQuery(firstLoadPosition, firstLoadSize);
+ cursor = mDb.query(sqLiteQuery);
+ List<T> rows = convertRows(cursor);
+ mDb.setTransactionSuccessful();
+ list = rows;
+ }
+ } catch (Throwable ex) {
+ if (++retry > 10)
+ throw ex;
+ eu.faircode.email.Log.w(ex);
+ try {
+ Thread.sleep(3000L);
+ } catch (InterruptedException ignored) {
+ }
+ } finally {
+ if (cursor != null) {
+ cursor.close();
+ }
+ mDb.endTransaction();
+ if (sqLiteQuery != null) {
+ sqLiteQuery.release();
+ }
@@ -128,6 +128,8 @@ public abstract class LimitOffsetDataSou
mDb.setTransactionSuccessful();
list = rows;
}
}
+ } catch (Throwable ex) {
+ eu.faircode.email.Log.w(ex);
} finally {
if (cursor != null) {
cursor.close();