Reputation: 71
Graph api returning json array data here is it's detail
I had a Task to display these json array to my recyclerView so i tried to convert json array to a arraylist but my array List Returning 0 . i am not getting what probable changes needed for the correct parsing here is my detail code
GraphRequest(
AccessToken.getCurrentAccessToken(), "/me/posts", null,HttpMethod.GET,
GraphRequest.Callback { response ->
Log.e(TAG, response.toString())
try {
var json: JSONObject = response.jsonObject
var jarray: JSONArray = json.getJSONArray("data")
mArrayList = ArrayList()
for (i in 0 until jarray.length()) {
// mArrayList = ArrayList()
var mdataa: JSONObject = jarray.getJSONObject(i)
if (mdataa == null) {
Toast.makeText(this, " Nothing here", Toast.LENGTH_SHORT).show()
}
// this part don't have any mistake
mMessage = mdataa.getString("message")
mId = mdataa.getString("id")
mCreatedTime = mdataa.getString("created_time")
this.mArrayList?.add(Data(mMessage, mId, mCreatedTime))
}
} catch (e: JSONException) {
e.printStackTrace()
}
Toast.makeText(this,"total number of values in arraylist" + mArrayList?.size ,Toast.LENGTH_LONG).show() // this toast returning 0 value
if (mArrayList == null) {
Toast.makeText(this, "U GET Nothing here", Toast.LENGTH_SHORT).show()
} else {
var main: Intent = Intent(this@Display, DisplayingPost::class.java)
main.putParcelableArrayListExtra("data", mArrayList)
startActivity(main)
}
}
).executeAsync()
updated: i tried this still it's returning null try {
var jsonResponse:JSONObject= JSONObject(response.toString())
var jsonArray:JSONArray=jsonResponse.getJSONArray("data")
for (i in 0 until jsonArray.length())
{
var insidata:JSONObject=jsonArray.getJSONObject(i)
var mMessage:String=insidata.getString("message")
allMessage?.add(mMessage)
var mId:String=insidata.getString("id")
allId?.add(mId)
var dateofCreation:String=insidata.getString("created_time")
allCreatedDate?.add("dateofCreation")
}
}
catch (e: JSONException)
{
e.printStackTrace()
}
Toast.makeText(this,"Size here is"+ allId?.size ,Toast.LENGTH_LONG).show()
}
).executeAsync()
For Now I removed try catch block and changed few line of code which resulted in a Toast message that was Displaying my JSONArray size which was 25 but when i tired to fetch each object inside for block and displayed a Toast for value Outside of "for" block it is Still Returning null here is my new line of code .
// try {
var jsonResponse:JSONObject= response.getJSONObject()
// JSONObject(response.toString())
var jsonArray:JSONArray=jsonResponse.getJSONArray("data")
// Toast.makeText(this,"Size here is"+ jsonArray.length() ,Toast.LENGTH_LONG).show()
for (i in 0 until jsonArray.length())
{
var insidata:JSONObject=jsonArray.getJSONObject(i)
if (insidata.has("message")) {
var mMessage: String? = insidata.getString("message")
allMessage?.add(mMessage as String)
}
var mId:String=insidata.getString("id")
allId?.add(mId)
var dateOfCreation:String=insidata.getString("created_time")
allCreatedDate?.add(dateOfCreation)
}
// }
// catch (e: JSONException)
// {
// e.printStackTrace()
// }
Toast.makeText(this,"Size here is"+ allMessage?.size ,Toast.LENGTH_LONG).show()
}
).executeAsync()
for now what i did i implimented a Toast message inside my for loop which returning the 1st Object of json Array
}
if (i==0) {
Toast.makeText(this, "" + insidata, Toast.LENGTH_LONG).show()
}
but when i implimented this
}
if (i==0) {
Toast.makeText(this, "" + mId, Toast.LENGTH_LONG).show()
i don't undERsTAND WHY IT IS Still RETURNING NULL plz help me get out of it }
Upvotes: 2
Views: 845
Reputation: 594
Try this code
ArrayList<String> listdata = new ArrayList<String>();
JSONArray jArray = (JSONArray)jsonObject;
if (jArray != null) {
for (int i=0;i<jArray.length();i++){
listdata.add(jArray.getString(i));
}
}
Upvotes: 1