X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Futils%2FMLDB.java;h=6aaa62c6df099cf28fa4c65d971182dac926acc7;hb=4097e258df29d671bb72f89483489388dd5f4aa8;hp=07aea52b34b91a2e425ffda643c77d2a94f57e5f;hpb=64d69a2f7f729949b9236489ab7c4ce9f9aaea86;p=mobile-ledger.git 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..6aaa62c6 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,47 @@ 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() {} + public abstract boolean onRow(@NonNull Cursor cursor); + public void onNoRows() {} + public void onException(Exception exception) { + Logger.debug("MLDB", "Exception in asynchronous SQL", exception); + } + public void onDone() {} } }