com.android.volley.ParseError: org.json.JSONException: значение [{}] типа org.json.JSONArray не может быть преобразовано в JSONObject. - PullRequest
0 голосов
/ 06 июня 2018

jsondata:

[{"product_id": "2", "product_title": "test", "product_thumbnail": "", "product_description": "test", "product_place": "", "product_user": "1", "product_store": "", "product_date": "1546875653", "product_cost": "", "product_off": ""}, { "product_id": "3", "PRODUCT_TITLE": "test1", "product_thumbnail": "", "PRODUCT_DESCRIPTION": "test1", "product_place": "", "product_user": "1", "product_store": "", "product_date":"1546875653", "product_cost": "", "product_off": ""}]

Я получаю эту ошибку:

Ошибка ответа покоя :: com.android.volley.ParseError: org.json.JSONException: Value [{"product_id": "2", "product_title": "test", "product_thumbnail": "", "product_description": "test", "product_place": "" "product_user": "1", "product_store": "", "product_date": "1546875653", "product_cost": "", "product_off": ""}, { "product_id": "3","PRODUCT_TITLE ":" test1" , "product_thumbnail": "", "PRODUCT_DESCRIPTION": "test1", "product_place": "", "product_user": "1", "product_store": "", "product_date": "1546875653", "product_cost": "", "product_off": ""}] типа org.json.JSONArray невозможно преобразовать в JSONObject

мой код Android:

_httpHandler.addRequest(Request.Method.GET, "product", null, response -> {
        try {
            Log.e("response is:",response.toString());

            for (int i = 0; i < response.length(); i++) {
                JSONObject product = response.getJSONObject(String.valueOf(i));

                productList.add(new Product(
                        product.getString("product_id"),
                        product.getString("product_title"),
                        product.getString("product_thumbnail"),
                        product.getString("product_description"),
                        product.getString("product_place"),
                        product.getString("product_user"),
                        product.getString("product_store"),
                        product.getString("product_date"),
                        product.getString("product_off"),
                        product.getString("product_price")));
            }

            ProductAdapter adapter = new ProductAdapter(MainActivity.this, productList);
            recyclerView.setAdapter(adapter);

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }, error -> {
        Toast.makeText(MainActivity.this, "Get Product Has Error", Toast.LENGTH_LONG).show();
        Log.e("Rest response error: ", error.toString());
    });

и функция AddRequest:

public void addRequest(int method, String url, JSONObject jsonRequest,
                       Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) {
    url = api_url + url;
    Log.e("url is: ", url);
    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(method, url, jsonRequest, listener, errorListener){
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> params = new HashMap<String, String>();
            params.put("Content-Type","application/x-www-form-urlencoded");
            params.put("Accept", "application/json");
            return params;
        }
    };
    requestQueue.add(jsonObjectRequest);}

Можете ли вы помочь мне исправить это?

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Ваш ответ JSONArray, но вы выполняете JsonObjectRequest, поэтому ваш Response.Listener также ожидает JSONObject.Вот почему залп не может разыграть JSONArray до JSONObject.Используйте JsonArrayRequest .Так что ваш Response.Listener будет ожидать JSONArray

0 голосов
/ 06 июня 2018

Попробуйте, это поможет вам

Здесь вам нужно получить JSONArray из вашего ответа

вот так

try {
            JSONArray json = new JSONArray(response);

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

                JSONObject product= json.getJSONObject(i);
                Log.e("json 1", product.getString("product_title"));

                productList.add(new Product(
                        product.getString("product_id"),
                        product.getString("product_title"),
                        product.getString("product_thumbnail"),
                        product.getString("product_description"),
                        product.getString("product_place"),
                        product.getString("product_user"),
                        product.getString("product_store"),
                        product.getString("product_date"),
                        product.getString("product_off"),
                        product.getString("product_price")));

            }
        ProductAdapter adapter = new ProductAdapter(MainActivity.this, productList);
        recyclerView.setAdapter(adapter);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

Дайте мне знать, работает ли он для вас,или пометьте его как полезный, если он работает для вас.

0 голосов
/ 06 июня 2018

попробуйте

productList = new Gson().fromJson(response.toString(),new TypeToken<ArrayList<Category>>() {
    }.getType());
...