X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Futils%2FMLDB.java;h=a449e466917262731d1af8be74b536d9b0679ca2;hp=07aea52b34b91a2e425ffda643c77d2a94f57e5f;hb=1c9558f39ac9b1ea8e18a5afeba374e91c95ea2f;hpb=64d69a2f7f729949b9236489ab7c4ce9f9aaea86 diff --git a/app/src/main/java/net/ktnx/mobileledger/utils/MLDB.java b/app/src/main/java/net/ktnx/mobileledger/utils/MLDB.java index 07aea52b..a449e466 100644 --- a/app/src/main/java/net/ktnx/mobileledger/utils/MLDB.java +++ b/app/src/main/java/net/ktnx/mobileledger/utils/MLDB.java @@ -191,7 +191,41 @@ public final class MLDB { if (callback != null) view.setOnItemClickListener((parent, itemView, position, id) -> { callback.descriptionSelected(String.valueOf(view.getText())); + } + public static void queryInBackground(@NonNull String statement, @NonNull String[] params, + @NonNull CallbackHelper callbackHelper) { + /* All callbacks are called in the new (asynchronous) thread! */ + Thread t = new Thread(() -> { + callbackHelper.onStart(); + try { + SQLiteDatabase db = App.getDatabase(); + + try (Cursor cursor = db.rawQuery(statement, params)) { + boolean gotRow = false; + while (cursor.moveToNext()) { + gotRow = true; + if (!callbackHelper.onRow(cursor)) + break; + } + if (!gotRow) { + callbackHelper.onNoRows(); + } + } + } + catch (Exception e) { + callbackHelper.onException(e); + } + finally { + callbackHelper.onDone(); + } }); + + t.start(); + } + /* MLDB.CallbackHelper -- Abstract class for asynchronous SQL query callbacks */ + @SuppressWarnings("WeakerAccess") + abstract public static class CallbackHelper { + public void onStart() {} } }