如何从 JSONobject 获取数据并将其显示到列表视图中?
How to get data from JSONobject and display it into a listview?
这是我的JSON
{
"data": [
{
"id": 1,
"Name": "Choc Cake",
"Image": "1.jpg",
"Category": "Meal",
"Method": "",
"Ingredients": [
{
"name": "1 Cup Ice"
},
{
"name": "1 Bag Beans"
}
]
},
{
"id": 2,
"Name": "Ice Cake",
"Image": "dfdsfdsfsdfdfdsf.jpg",
"Category": "Meal",
"Method": "",
"Ingredients": [
{
"name": "1 Cup Ice"
}
]
}
]
}
现在我试图将它显示到 listView 中,我该怎么做,这就是我现在所拥有的(出于测试目的,我只是想在 toast 中显示所有名称)
JSONObject jsonObj = new JSONObject(jsonStr);
int length = jsonObj .length();
for(int i=0; i<length; i++) {
Toast.makeText(this, jsonObj.getJSONArray("data").
getJSONObject(i).getString("Name"), Toast.LENGTH_LONG).show();
}
以上代码只显示一个名字,不显示多个名字。我怎样才能为多个名字制作它?
您正在获取 JSONObject
的长度,但您应该在 JSONObject
中获取 JSONArray
的长度,以便遍历 json 数组项。
int length = jsonObj.getJSONArray("data").size()
我想你猜错了。仔细观察你有一个 Json 因为你有一个 Json 数组 name/key "data"
然后你可以获取它并逐个索引地遍历它。对于您,我为您提供了一个路线图,以便您在概念上变得容易
制作一个模型 class,它可以存储您在响应 api 或此 json 响应时获得的值。
取一个你模型类型的数组class来存储值
现在您可以添加 for 循环来保存值,或者您可以解析 jason 数组并将其保存到您为处理 jasonarray 而制作的数组中
这很容易被理解 this link and this 是解析 json 数组并显示在列表视图中的工作示例。阅读这两个链接后,您无需担心。
从 json 所在的 URL 获取结果并存储到任何变量(此处为结果),然后对其进行解码,我在下面显示,
试试这个,它可能会给你一些提示,我没有试过但可能对你有帮助
JSONObject jsonObject = new JSONObject(result);
JSONArray jsonArray = jsonObject.optJSONArray("data");
if (jsonArray != null) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObjects = jsonArray.optJSONObject(i);
int id = jsonObjects.optInt("id");
String varMessage = jsonObjects.optString("varMessage");
String Image = jsonObjects.optString("Image");
String Category = jsonObjects.optString("Category");
String Method = jsonObjects.optString("Method");
JSONArray jsonArrayIngredients = jsonObject.optJSONArray("Ingredients");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObjects = jsonArray.optJSONObject(i);
String name = jsonObjects.optString("name");
}
}
}
看看这段代码
//getting whole json string
JSONObject jsonObj = new JSONObject(jsonStr);
//extracting data array from json string
JSONArray ja_data = jsonObj.getJSONArray("data");
int length = jsonObj .length();
//loop to get all json objects from data json array
for(int i=0; i<length; i++)
{
JSONObject jObj = ja_data.getJSONObject(i);
Toast.makeText(this, jObj.getString("Name").toString(), Toast.LENGTH_LONG).show();
// getting inner array Ingredients
JSONArray ja = jObj.getJSONArray("Ingredients");
int len = ja.length();
// getting json objects from Ingredients json array
for(int j=0; j<len; j++)
{
JSONObject json = ja.getJSONObject(j);
Toast.makeText(this, json.getString("name").toString(), Toast.LENGTH_LONG).show();
}
}
我建议使用 'Log' 而不是 'Toast'。
如果有任何困惑或疑问让我知道,我会尽力解决。
如果答案令人满意,请将其标记为正确答案。
编码愉快!
谢谢
这是我的JSON
{
"data": [
{
"id": 1,
"Name": "Choc Cake",
"Image": "1.jpg",
"Category": "Meal",
"Method": "",
"Ingredients": [
{
"name": "1 Cup Ice"
},
{
"name": "1 Bag Beans"
}
]
},
{
"id": 2,
"Name": "Ice Cake",
"Image": "dfdsfdsfsdfdfdsf.jpg",
"Category": "Meal",
"Method": "",
"Ingredients": [
{
"name": "1 Cup Ice"
}
]
}
]
}
现在我试图将它显示到 listView 中,我该怎么做,这就是我现在所拥有的(出于测试目的,我只是想在 toast 中显示所有名称)
JSONObject jsonObj = new JSONObject(jsonStr);
int length = jsonObj .length();
for(int i=0; i<length; i++) {
Toast.makeText(this, jsonObj.getJSONArray("data").
getJSONObject(i).getString("Name"), Toast.LENGTH_LONG).show();
}
以上代码只显示一个名字,不显示多个名字。我怎样才能为多个名字制作它?
您正在获取 JSONObject
的长度,但您应该在 JSONObject
中获取 JSONArray
的长度,以便遍历 json 数组项。
int length = jsonObj.getJSONArray("data").size()
我想你猜错了。仔细观察你有一个 Json 因为你有一个 Json 数组 name/key "data"
然后你可以获取它并逐个索引地遍历它。对于您,我为您提供了一个路线图,以便您在概念上变得容易
制作一个模型 class,它可以存储您在响应 api 或此 json 响应时获得的值。
取一个你模型类型的数组class来存储值
现在您可以添加 for 循环来保存值,或者您可以解析 jason 数组并将其保存到您为处理 jasonarray 而制作的数组中
这很容易被理解 this link and this 是解析 json 数组并显示在列表视图中的工作示例。阅读这两个链接后,您无需担心。
从 json 所在的 URL 获取结果并存储到任何变量(此处为结果),然后对其进行解码,我在下面显示,
试试这个,它可能会给你一些提示,我没有试过但可能对你有帮助
JSONObject jsonObject = new JSONObject(result);
JSONArray jsonArray = jsonObject.optJSONArray("data");
if (jsonArray != null) {
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObjects = jsonArray.optJSONObject(i);
int id = jsonObjects.optInt("id");
String varMessage = jsonObjects.optString("varMessage");
String Image = jsonObjects.optString("Image");
String Category = jsonObjects.optString("Category");
String Method = jsonObjects.optString("Method");
JSONArray jsonArrayIngredients = jsonObject.optJSONArray("Ingredients");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObjects = jsonArray.optJSONObject(i);
String name = jsonObjects.optString("name");
}
}
}
看看这段代码
//getting whole json string
JSONObject jsonObj = new JSONObject(jsonStr);
//extracting data array from json string
JSONArray ja_data = jsonObj.getJSONArray("data");
int length = jsonObj .length();
//loop to get all json objects from data json array
for(int i=0; i<length; i++)
{
JSONObject jObj = ja_data.getJSONObject(i);
Toast.makeText(this, jObj.getString("Name").toString(), Toast.LENGTH_LONG).show();
// getting inner array Ingredients
JSONArray ja = jObj.getJSONArray("Ingredients");
int len = ja.length();
// getting json objects from Ingredients json array
for(int j=0; j<len; j++)
{
JSONObject json = ja.getJSONObject(j);
Toast.makeText(this, json.getString("name").toString(), Toast.LENGTH_LONG).show();
}
}
我建议使用 'Log' 而不是 'Toast'。
如果有任何困惑或疑问让我知道,我会尽力解决。 如果答案令人满意,请将其标记为正确答案。
编码愉快! 谢谢