android光标到JSONArray

如何将光标“转换”为JSONArray?

我的光标为3columns(_id,name,birth)

我搜索过,但我找不到任何例子

您不能将游标的内容直接转换为JSONObject,但您可以使用某些逻辑来执行此操作。

例如:从游标中检索字符串,形成一个遵循JSON格式的String,并使用它来创建一个json对象:

JSONObject jFromCursor=new JSONObject(string_in_JSON_format); 

光标到JSONArray

 public JSONArray cur2Json(Cursor cursor) { JSONArray resultSet = new JSONArray(); cursor.moveToFirst(); while (cursor.isAfterLast() == false) { int totalColumn = cursor.getColumnCount(); JSONObject rowObject = new JSONObject(); for (int i = 0; i < totalColumn; i++) { if (cursor.getColumnName(i) != null) { try { rowObject.put(cursor.getColumnName(i), cursor.getString(i)); } catch (Exception e) { Log.d(TAG, e.getMessage()); } } } resultSet.put(rowObject); cursor.moveToNext(); } cursor.close(); return resultSet; } 
 private String cursorToString(Cursor crs) { JSONArray arr = new JSONArray(); crs.moveToFirst(); while (!crs.isAfterLast()) { int nColumns = crs.getColumnCount(); JSONObject row = new JSONObject(); for (int i = 0 ; i < nColumns ; i++) { String colName = crs.getColumnName(i); if (colName != null) { String val = ""; try { switch (crs.getType(i)) { case Cursor.FIELD_TYPE_BLOB : row.put(colName, crs.getBlob(i).toString()); break; case Cursor.FIELD_TYPE_FLOAT : row.put(colName, crs.getDouble(i)) ; break; case Cursor.FIELD_TYPE_INTEGER: row.put(colName, crs.getLong(i)) ; break; case Cursor.FIELD_TYPE_NULL : row.put(colName, null) ; break; case Cursor.FIELD_TYPE_STRING : row.put(colName, crs.getString(i)) ; break; } } catch (JSONException e) { } } } arr.put(row); if (!crs.moveToNext()) break; } crs.close(); // close the cursor return arr.toString(); }