Improved handling of null objects; refactoring & cleanup

This commit is contained in:
Chris Brody 2012-12-05 20:56:16 +01:00
parent f1a4a0cc62
commit bdf5ba7cb0

View File

@ -155,9 +155,11 @@ public class SQLitePlugin extends Plugin {
* @param size * @param size
* The size in bytes * The size in bytes
*/ */
private void openDatabase(String db, String version, String display_name, private void openDatabase(String db, String version, String display_name, long size)
long size) { {
SQLiteDatabase myDb = this.cordova.getActivity().getApplicationContext().openOrCreateDatabase(db + ".db", Context.MODE_PRIVATE, null); SQLiteDatabase myDb =
this.cordova.getActivity().getApplicationContext().openOrCreateDatabase(db + ".db", Context.MODE_PRIVATE, null);
myDbMap.put(db, myDb); myDbMap.put(db, myDb);
} }
@ -165,8 +167,11 @@ public class SQLitePlugin extends Plugin {
return myDbMap.get(dbName); return myDbMap.get(dbName);
} }
private void executeSqlBatch(String dbName, String[] queryarr, JSONArray[] jsonparams, String[] queryIDs, String tx_id) { private void executeSqlBatch(String dbName, String[] queryarr, JSONArray[] jsonparams, String[] queryIDs, String tx_id)
SQLiteDatabase myDb = this.getDatabase(dbName); // XXX TODO check for null {
SQLiteDatabase myDb = this.getDatabase(dbName);
if (myDb == null) return;
try { try {
myDb.beginTransaction(); myDb.beginTransaction();
@ -192,7 +197,8 @@ public class SQLitePlugin extends Plugin {
long insertId = myStatement.executeInsert(); long insertId = myStatement.executeInsert();
String result = "{'insertId':'" + insertId + "'}"; String result = "{'insertId':'" + insertId + "'}";
this.sendJavascript("SQLitePluginTransaction.queryCompleteCallback('" + tx_id + "','" + query_id + "', " + result + ");"); this.sendJavascript("SQLitePluginTransaction.queryCompleteCallback('" +
tx_id + "','" + query_id + "', " + result + ");");
} else { } else {
String[] params = null; String[] params = null;
@ -200,15 +206,18 @@ public class SQLitePlugin extends Plugin {
params = new String[jsonparams[i].length()]; params = new String[jsonparams[i].length()];
for (int j = 0; j < jsonparams[i].length(); j++) { for (int j = 0; j < jsonparams[i].length(); j++) {
params[j] = jsonparams[i].getString(j); if (jsonparams[i].isNull(j))
if(params[j] == "null") // XXX better check
params[j] = ""; params[j] = "";
else
params[j] = jsonparams[i].getString(j);
} }
} }
Cursor myCursor = myDb.rawQuery(query, params); Cursor myCursor = myDb.rawQuery(query, params);
if(query_id.length() > 0)
this.processResults(myCursor, query_id, tx_id); this.processResults(myCursor, query_id, tx_id);
myCursor.close(); myCursor.close();
} }
} }
@ -235,69 +244,27 @@ public class SQLitePlugin extends Plugin {
* *
* @param cur * @param cur
* Cursor into query results * Cursor into query results
* @param query_id
* Query id
* @param tx_id * @param tx_id
* Transaction id * Transaction id
*/ */
private void processResults(Cursor cur, String query_id, String tx_id) private void processResults(Cursor cur, String query_id, String tx_id)
{ {
String result = "[]"; String result = this.results2string(cur);
// If query result has rows
// XXX TODO use results2string() and do test:
if (cur.moveToFirst()) {
JSONArray fullresult = new JSONArray();
String key = "";
int colCount = cur.getColumnCount();
// Build up JSON result object for each row
do {
JSONObject row = new JSONObject();
try {
for (int i = 0; i < colCount; ++i) {
key = cur.getColumnName(i);
// for old Android SDK remove lines from HERE:
if(android.os.Build.VERSION.SDK_INT >= 11)
{
switch(cur.getType (i))
{
case Cursor.FIELD_TYPE_NULL:
row.put(key, null);
break;
case Cursor.FIELD_TYPE_INTEGER:
row.put(key, cur.getInt(i));
break;
case Cursor.FIELD_TYPE_FLOAT:
row.put(key, cur.getFloat(i));
break;
case Cursor.FIELD_TYPE_STRING:
row.put(key, cur.getString(i));
break;
case Cursor.FIELD_TYPE_BLOB:
row.put(key, cur.getBlob(i));
break;
}
}
else // to HERE.
{
row.put(key, cur.getString(i));
}
}
fullresult.put(row);
} catch (JSONException e) {
e.printStackTrace();
}
} while (cur.moveToNext());
result = fullresult.toString();
}
if(query_id.length() > 0)
this.sendJavascript(" SQLitePluginTransaction.queryCompleteCallback('" + tx_id + "','" + query_id + "', " + result + ");");
this.sendJavascript("SQLitePluginTransaction.queryCompleteCallback('" +
tx_id + "','" + query_id + "', " + result + ");");
} }
/**
* Process query results.
*
* @param cur
* Cursor into query results
* @param id
* Caller db id
*/
private void processPragmaResults(Cursor cur, String id) private void processPragmaResults(Cursor cur, String id)
{ {
String result = this.results2string(cur); String result = this.results2string(cur);
@ -305,6 +272,13 @@ public class SQLitePlugin extends Plugin {
this.sendJavascript("SQLitePluginCallback.p1('" + id + "', " + result + ");"); this.sendJavascript("SQLitePluginCallback.p1('" + id + "', " + result + ");");
} }
/**
* Convert results cursor to JSON string.
*
* @param cur
* Cursor into query results
* @return results in string form
*/
private String results2string(Cursor cur) private String results2string(Cursor cur)
{ {
String result = "[]"; String result = "[]";