2012-10-25 72 views
4

我怎樣才能將遊標「轉換」爲JSONArray?android遊標到JSONArray

我的光標爲3columns(_id,姓名,出生年月)

我已經搜查,但我不能沒有找到任何的例子

回答

3

不能直接將光標的內容到一個JSONObject ,但你可以用一些邏輯來做到這一點。

爲例如:檢索來自光標的字符串,形成下面的JSON格式的字符串,並用它來製作一個JSON對象:

JSONObject jFromCursor=new JSONObject(string_in_JSON_format); 
+0

所以我需要迭代遊標並連接字符串(「_id:」+ cursor.getString(0)「,」name:「」+ cursor.getString(1)「,」birth:「」+ cursor.getString( 2))... –

+0

是的,你需要迭代並將其轉換爲JSON對象 –

4
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(); 
} 
+0

這絕對是我需要的,因爲我的光標具有不同類型的數據。 – Acuna

15

光標到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; 

} 
+0

它總計在這裏? – zeeshan

+0

int totalColumn = cursor.getColumnCount(); – Adonias

+0

謝謝。我已經明白了這一點。這段代碼對我來說工作得很好。 – zeeshan