Convert a Content Provider Cursor to JSON

This is a short article where we will read the data from the content provider and convert it to JSON. So, Let's query the SMS table and get a reference to the cursor.

// Query the sms table
val cursor = context?.contentResolver?.query(
    Telephony.Sms.Inbox.CONTENT_URI, null,
    null, null, null
)

With the cursor in hand, loop through it to read the rows and columns.

cursor?.use {
    // Total number of columns in the table
    Log.v(TAG, "Column Count: ${it.columnCount}")
    // Total number of rows in the table
    Log.v(TAG, "Row Count: ${it.count}")
    // Move to the first item
    it.moveToFirst()
    // Temporary json variable that contains all the rows and their values
    val rowJson = JSONArray()
    // Loop through the rows
    do {
        // Temporary json variable that contains all the columns and their vales
        val columnJson = JSONObject()
        // Loop through the columns
        it.columnNames.forEachIndexed { i, columnName ->
            // Add the column name and its value to the column array
            columnJson.put(columnName, it.getString(i))
        }
        Log.v(TAG, "Json Row: $columnJson")
        // Add the column data to the corresponding row
        rowJson.put(columnJson)
    } while (it.moveToNext())
    // Return the json string
    rowJson.toString()
}.apply {
    // Print the entire sms data to the Logcat
    Log.v(TAG, this)
}

Below is a sample row of the SMS table in the JSON format. The columns will differ for different devices and the OS versions.

{  
   "_id":"792",
   "thread_id":"286",
   "address":"IX-OLACBS",
   "person":"0",
   "date":"1545299882278",
   "date_sent":"1545299882000",
   "protocol":"0",
   "read":"0",
   "status":"-1",
   "type":"1",
   "reply_path_present":"0",
   "body":"Hi Srikar Reddy, not only rides, now order food also on Ola! Fire up the app and get delicious food delivered straight to your desk. https:\/\/bit.ly\/2QaptoK",
   "service_center":"+919844047238",
   "locked":"0",
   "sub_id":"0",
   "network_type":"13",
   "error_code":"0",
   "creator":"com.android.mms",
   "seen":"1",
   "mtype":"0",
   "privacy_mode":"0",
   "group_id":"2592",
   "addr_body":"0,",
   "time_body":"0,",
   "risk_url_body":"",
   "is_secret":"0"
}

Popular posts from this blog

Arithmetic Operations in Tensorflow

How to Enable Multidex for Android App

How to Create Facebook App