首页 > 解决方案 > 无法将 json 数组转换为 json 列表

问题描述

Graph api在这里返回json数组数据是它的细节图像包含 json 数组的列表

我有一个任务将这些 json 数组显示到我的 recyclerView 所以我尝试将 json 数组转换为 arraylist 但我的数组 List Returning 0 。我没有得到正确解析所需的可能更改是我的详细代码

                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()

更新:我试过了,它仍然返回 null tr​​y {

                        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() 

现在,我删除了 try catch 块并更改了几行代码,这导致 Toast 消息显示我的 JSONArray 大小为 25,但是当我厌倦了获取块内的每个对象并显示 Toast 以获取“for”之外的值时阻止它仍然返回 null 这里是我的新代码行。

                           //  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 循环中隐含了一个 Toast 消息,它返回 json 数组的第一个对象

               }
                            if (i==0) {
                                Toast.makeText(this, "" + insidata, Toast.LENGTH_LONG).show()
                            }

但是当我暗示这个时

          }
                            if (i==0) {
                                Toast.makeText(this, "" + mId, Toast.LENGTH_LONG).show()

我不明白为什么它仍然返回 NULL 请帮助我摆脱它}

标签: android

解决方案


试试这个代码

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));
   } 
} 

推荐阅读