java - 如何在android中使用volley获取Json对象中的Json数组并在listview代码和Xml Avilavble中设置此json数据

标签 java android json android-volley

我正在使用 volley 进行 JSON 解析。我想使用 GET 从服务器端获取一些我尝试发送的数据。谁能告诉我怎么做?以下是我的代码。我还尝试了 HashMapJSONobject 但收到此错误。

of type org.json.JSONObject cannot be converted to JSONArray

还有更多,请告诉我原因。

JSON

{
 "Baby Care": [{
  "id": "35",
  "sub_category": "Baby Food"
 }, {
  "id": "36",
  "sub_category": "Diapers & Wipes"
 }, {
  "id": "38",
  "sub_category": "Baby Accessories"
 }],
 "Personal Care": [{
  "id": "27",
  "sub_category": "Skin Care"
 }, {
  "id": "28",
  "sub_category": "Hair Care"
 }, {
  "id": "29",
  "sub_category": "Oral Care"
 }, {
  "id": "30",
  "sub_category": "Bath, Face & Hand Wash"
 }],
 "Grocery": [{
  "id": "51",
  "sub_category": "Cheese"
 }, {
  "id": "52",
  "sub_category": "Cakes & Toast"
 }, {
  "id": "63",
  "sub_category": "Beverages"
 }, {
  "id": "69",
  "sub_category": "Dal & Pulses"
 }, {
  "id": "70",
  "sub_category": "Rice"
 }],
 "Household": [{
  "id": "59",
  "sub_category": "Kitchen Appliances"
 }, {
  "id": "60",
  "sub_category": "Vacuum and Floor care"
 }],
 "Women": [{
  "id": "64",
  "sub_category": "Jewellery"
 }, {
  "id": "65",
  "sub_category": "Make-up"
 }, {
  "id": "66",
  "sub_category": "Perfume"
 }],
 "Men": [{
  "id": "67",
  "sub_category": "Perfume"
 }, {
  "id": "68",
  "sub_category": "Accessories"
 }]
}

如何使用 Volley 获取此 JSON 格式并设置为 ListView 我尝试了下面的代码,但没有得到任何对象:

JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(productUrl, new Response.Listener < JSONArray > () {
 @Override
 public void onResponse(JSONArray response) {
  try {
   for (int i = 0; i < response.length(); i++) {

    JSONArray ja = response.getJSONArray(i);
    for (int j = 0; j < ja.length(); j++) {
     JSONObject jb = ja.getJSONObject(j);
     SubProduct movie = new SubProduct();
     movie.setId(jb.getInt("id"));
     movie.setname(jb.getString("sub_category"));

     movieList.add(movie);
    }
   }
   adapter.notifyDataSetChanged();
   progressDialog.dismiss();

  } catch (JSONException e) {
   e.printStackTrace();
   progressDialog.dismiss();
  }
 }
}, new Response.ErrorListener() {
 @Override
 public void onErrorResponse(VolleyError error) {
  Log.e("Volley", error.toString());
  progressDialog.dismiss();
 }
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(jsonArrayRequest);

最佳答案

使用:

JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET,
                productUrl, null,
                new Response.Listener<JSONObject>() {

而不是:

   JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(productUrl, new Response.Listener<JSONArray>(){

使用下面的代码获取数组的动态键:

Iterator<?> keys = response.keys();
while( keys.hasNext() ) {
    String key = (String)keys.next();
    if ( response.get(key) instanceof JSONObject ) {
        System.out.println(key); // do whatever you want with it
    }
}

您可以使用以下代码获取对象:

JSONArray arr = response.getJSONArray(key);
    JSONObject element;
    for(int i = 0; i < arr.length(); i++){
        element = arr.getJSONObject(i);
    }

关于java - 如何在android中使用volley获取Json对象中的Json数组并在listview代码和Xml Avilavble中设置此json数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56804366/

相关文章:

ruby-on-rails - 设计 API 身份验证

python - 将 JSON 输出发布到 PubSub 时出现问题。 'u' 被添加到每个字段

java - 为什么此正则表达式不从字符串中删除所有 3 个或更多出现的地方?

java - 我怎么知道 org.eclipse.swt.browser.Browser.setText(html) renderred html 是否完成

java - 从一个 ArrayList 提取并修改到另一个 ArrayList

android - ActivityManager 不保留 REAL_GET_TASKS 警告

java - 添加失败 : stat/var/lib/docker/tmp/docker-builderXYZ/myapp. jar: 没有这样的文件或目录

android - onTextChanged 与 Android 中的 afterTextChanged - 需要现场示例

android - 如何使用 volley 库访问 JsonArray 中的值

iphone - iPhone 中的 JSON 解析器出现问题?