diff --git a/src/android/org/pgsqlite/SQLitePlugin.java b/src/android/org/pgsqlite/SQLitePlugin.java index 912d0bffc..3a0d5a0fa 100755 --- a/src/android/org/pgsqlite/SQLitePlugin.java +++ b/src/android/org/pgsqlite/SQLitePlugin.java @@ -101,10 +101,9 @@ private boolean executeAndPossiblyThrow(Action action, JSONArray args, CallbackC o = args.getJSONObject(0); dbname = o.getString("name"); - DBRunner r = new DBRunner(dbname); + DBRunner r = new DBRunner(dbname, cbc); this.rmap.put(dbname, r); this.cordova.getThreadPool().execute(r); - // TODO should send an async callback break; case close: @@ -194,6 +193,16 @@ public void onDestroy() { * * @param dbName The name of the database file */ + private void openDatabase(String dbname, CallbackContext cbc) { + try { + openDatabase(dbname); + cbc.success(); + } catch (SQLiteException e) { + cbc.error("can't open database " + e); + throw e; + } + } + private void openDatabase(String dbname) { if (this.getDatabase(dbname) != null) { // TODO should wait for the db thread(s) to stop (!!) @@ -716,14 +725,16 @@ private void bindPreHoneycomb(JSONObject row, String key, Cursor cursor, int i) private class DBRunner implements Runnable { final String dbname; final BlockingQueue q; + final CallbackContext openCbc; - DBRunner(final String dbname) { + DBRunner(final String dbname, CallbackContext cbc) { this.dbname = dbname; this.q = new LinkedBlockingQueue(); + this.openCbc = cbc; } public void run() { - openDatabase(dbname); + openDatabase(dbname, this.openCbc); try { DBQuery dbq = q.take();