Как я могу анализировать объект Json или массив? Где ошибка в моем коде?

У меня есть ошибка при анализе Json в Android Studio, Пожалуйста, если у вас есть какие-либо идеи, можете ли вы поделиться, где моя ошибка.

Я хочу получить информацию о текущем обменном курсе и распечатать ее в текстовом виде.

URL-адрес Json/Api: https://api.exchangeratesapi.io/latest?base=USD

private void jsonParse() {
    
    String SHOP_URL = "https://api.exchangeratesapi.io/latest?base=USD&symbols=EUR,GBP";
     
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, SHOP_URL, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    try {

                        JSONArray jsonArray = response.getJSONArray("rates");

                        for (int i = 0; i < jsonArray.length(); i++) {
                            JSONObject result = jsonArray.getJSONObject(i);
                            int xGBP=result.getInt("GBP");
                                 
                            usdtry.setText(String.valueOf(xGBP));
                        }
                        
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    });
    pRequestQueue.add(request);

}

Этот код не ошибается, но не отвечает. Я думаю, что у меня чего-то не хватает.

0
0
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

rates — это JsonObject, а не массив.

Итак, ваш код должен быть

JSONObject rates = response.getJSONObject("rates");
double xGBP = rates.getDouble("GBP");
usdtry.setText(String.valueOf(xGBP));

Также для лучшего форматирования можно использовать:

DecimalFormat formatter = new DecimalFormat("###,###.##", DecimalFormatSymbols.getInstance(Locale.ENGLISH));
usdtry.setText(formatter.format(xGBP));

Спасибо, я изменил свой код, как и ваше решение, но все еще не показываю результат в своем текстовом представлении. Нужно ли использовать часть JsonObjectRequest?

Lutfu A. 24.12.2020 10:28

@ЛютфуА. Вы должны получать какие-то журналы ошибок от e.printStackTrace();, которые у вас есть. Пожалуйста, разместите их в вопросе

Archie.bpgc 24.12.2020 10:29

Тогда вам просто нужно отладить его. Попробуйте распечатать ответ JSON и объект ставок

Archie.bpgc 24.12.2020 11:01

Где я должен добавить URL-адрес при использовании только объекта Jsonobject? Требуется ли ответ?

Lutfu A. 24.12.2020 11:26

Спасибо за решение. Я понял, где моя ошибка.

Lutfu A. 26.12.2020 13:46

Другие вопросы по теме