【问题标题】:How can i get the data from array inside an array android studio JSONArray如何从数组 android studio JSONArray 中的数组中获取数据
【发布时间】:2019-08-16 09:35:33
【问题描述】:

我从 API 获得 JSONarray 的响应,我可以将数据放入我的 arraymodel,但问题是我需要来自一个数组的一些特定数据,我不知道该怎么做。

数组是:

"history": [
        {
            "id": "20",
            "code": "mcw_5b97de588ce0c",
            "date": "2018-09-11 17:25:12",
            "status": "1",
            "name": "a:1:{s:7:\"english\";s:9:\"rent bill\";}",
            "img": "shop.png"
        }

我想要来自 name 的英文、S:9 和租金账单数据。

我在这里发布我的代码,以便您了解我做了什么以及我犯了什么错误。

public void  shopListing()
{

    showSimpleProgressDialog(this, "Loading...","Fetching Shops History",false);

    StringRequest stringRequest = new StringRequest(Request.Method.POST, shopurl,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {

                    Log.d("strrrrr", ">>" + response);

                    try {

                        JSONObject obj = new JSONObject(response);
                        //if(obj.optString("status").equals("true")){

                        dataModelArrayList = new ArrayList<>();
                        JSONArray dataArray  = obj.getJSONArray("history");

                        for (int i = 0; i < dataArray.length(); i++) {

                            shopModel playerModel = new shopModel();
                            JSONObject dataobj = dataArray.getJSONObject(i);
                            playerModel.setId(dataobj.getString("id"));
                            playerModel.setName(dataobj.getString("name"));
                            playerModel.setDetails(dataobj.getString("date"));


                            dataModelArrayList.add(playerModel);

                        }

                        setupListview();

                        // }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }


                }

            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    //displaying the error in toast if occurrs
                    Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
                }
            }){
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {

            String api = getApi_key();
            String user = getUser_key();

            Map<String, String> param = new HashMap<> ();
            param.put("api_key", api);
            param.put("user_key", user);


            return param;
        }
    };
    RequestQueue requestQueue = Volley.newRequestQueue(this);

    requestQueue.add(stringRequest);

}

【问题讨论】:

  • "name": "a:1:{s:7:\"english\";s:9:\"rent bill\";}" 这里的“名称”值不是有效的 JSON 格式。要么要求 API 创建者更正它,要么通过使用子字符串来解决问题。

标签: java android arraylist jsonobjectrequest


【解决方案1】:

您的服务器响应不好。与其将名称作为字符串发送给您,不如将“名称”作为对象返回,如下所示:

"history": [
    {
        "id": "20",
        "code": "mcw_5b97de588ce0c",
        "date": "2018-09-11 17:25:12",
        "status": "1",
        "name": 
            {
                "s":7,
                "subject":"english",
                "s":9,
                "any_key":"rent bill"
            },
        "img": "shop.png"
    }

我觉得服务器正在返回您为处理来自客户端的请求而编写的代码字符串。请仔细检查。

【讨论】:

  • 服务器不在我的控制范围内。
猜你喜欢
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 2022-01-22
  • 2016-12-16
  • 2019-03-19
  • 1970-01-01
  • 2022-11-03
  • 2015-02-02
相关资源
最近更新 更多