Как я могу получить данные из массива внутри массива android studio JSONArray

#java #android #arraylist #jsonobjectrequest

#java #Android #arraylist #jsonobjectrequest

Вопрос:

Я получаю ответ от 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"
        }
  

Мне нужны данные на английском, S: 9 и счет за аренду из name.

Я публикую свой код здесь, чтобы вы могли понять, что я сделал и какую ошибку я совершаю.

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

}
  

Комментарии:

1. "name": "a:1:{s:7:"english";s:9:"rent bill";}" здесь значение «name» не в допустимом формате JSON. Либо попросите создателя API исправить это, либо сделайте обходной путь, поиграв с substring .

Ответ №1:

Ваш ответ сервера не является хорошим. вместо отправки вам name в виде строки, он должен вернуть вам «name» в виде объекта, подобного этому:

 "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"
    }
  

Я чувствую, что сервер возвращает вам строку кода, которую вы написали для обработки запроса от клиента. Пожалуйста, дважды проверьте.

Комментарии:

1. сервер не находится под моим контролем.