android - 无法将 json 数组转换为 json 列表
问题描述
Graph api在这里返回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 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()
现在,我删除了 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 请帮助我摆脱它}
解决方案
试试这个代码
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));
}
}
推荐阅读
- typescript - OOP:方法返回新实例,孩子应该返回什么?
- uml - 我的“元模型”(UML)的实例化说明
- salesforce - 嗨,使用 salesforce 中的电子邮件字段更新特定值
- c++ - 什么决定了 Linux 上共享库的二进制兼容性?
- kubernetes - Kubernetes:找不到指向的最终端点。验证服务时出错:获取服务时出错:找不到服务
- java - Powermock:如何在枚举常量中模拟方法
- ios - 动态字体类型的辅助功能检查器警告
- python - 连接两个具有不同索引和不同形状的元组
- python - 如果在 Scrapy 中遇到某些情况,如何摆脱爬网
- java - 调用 init 方法失败;嵌套异常是 java.lang.IllegalArgumentException:不是托管类型: