Я не могу использовать объект Json и volley

#android #json #kotlin

#Android #json #kotlin

Вопрос:

Бревенчатый Кот

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

     val url ="https://api.openweathermap.org/data/2.5/find?q=Ankaraamp;appid=7ac4858bc53d5c6623bb4edd84b4b850amp;lang=tramp;units=metric"
    val havadurumuObjeRequest= JsonObjectRequest(Request.Method.GET,url,null,object :Response.Listener<JSONObject>{
        override fun onResponse(response: JSONObject?) {


            var main = response?.getJSONObject("main")
            var sicaklik =main?.getInt("temp")

            tvSicaklik.text=sicaklik.toString()
            var sehiradi=response?.getString("name")
            tvSehir.text=sehiradi
            var weather=response?.getJSONArray("weather")
            var aciklama=weather?.getJSONObject(0)?.getString("description")
            tvAciklama.text=aciklama

            var icon=weather?.getJSONObject(0)?.getString("icon")
            var resimDosyaadi=resources.getIdentifier("icon_" icon?.sonKarakterisil(),"drawable",packageName)
            imgHavaDurumu.setImageResource(resimDosyaadi)





        }


    },object :Response.ErrorListener{
        override fun onErrorResponse(error: VolleyError?) {


        }

    })
    MySingleton.getInstance(this)?.addToRequestQueue(havadurumuObjeRequest)
}
 

**

Ответ №1:

пожалуйста, проверьте свой api, потому что ответ от https://api.openweathermap.org/data/2.5/find ?q= Анкара amp; appid = 7ac4858bc53d5c6623bb4edd84b4b850 amp;lang = tr amp; единицы измерения = метрика

 {
  "message": "accurate",
  "cod": "200",
  "count": 2,
  "list": [
    {
      "id": 323786,
      "name": "Ankara",
      "coord": {
        "lat": 39.9199,
        "lon": 32.8543
      },
      "main": {
        "temp": 8.09,
        "feels_like": 4.97,
        "temp_min": 7,
        "temp_max": 9,
        "pressure": 1010,
        "humidity": 76
      },
      "dt": 1607911747,
      "wind": {
        "speed": 2.6,
        "deg": 70
      },
      "sys": {
        "country": "TR"
      },
      "rain": null,
      "snow": null,
      "clouds": {
        "all": 75
      },
      "weather": [
        {
          "id": 803,
          "main": "Clouds",
          "description": "parçalı bulutlu",
          "icon": "04n"
        }
      ]
    },
    {
      "id": 323784,
      "name": "Ankara",
      "coord": {
        "lat": 39.9167,
        "lon": 32.8333
      },
      "main": {
        "temp": 8.11,
        "feels_like": 5,
        "temp_min": 7,
        "temp_max": 9,
        "pressure": 1010,
        "humidity": 76
      },
      "dt": 1607911508,
      "wind": {
        "speed": 2.6,
        "deg": 70
      },
      "sys": {
        "country": "TR"
      },
      "rain": null,
      "snow": null,
      "clouds": {
        "all": 75
      },
      "weather": [
        {
          "id": 803,
          "main": "Clouds",
          "description": "parçalı bulutlu",
          "icon": "04n"
        }
      ]
    }
  ]
}
 

итак, у нас есть list как JSONArray, так что, чтобы получить main , temp … значение, необходимо проанализировать

 // We get list info (This is an array)
val jArr = jObj.getJSONArray("list");

// I just use only first value, if you want use all, use loop instead 
val JSONdata = jArr.getJSONObject(0);

// then use as your code 
var main = JSONdata?.getJSONObject("main")
            var sicaklik = main?.getInt("temp")

            tvSicaklik.text = sicaklik.toString()
            var sehiradi = JSONdata?.getString("name")
            tvSehir.text = sehiradi
            var weather = JSONdata?.getJSONArray("weather")
            var aciklama = weather?.getJSONObject(0)?.getString("description")
            tvAciklama.text = aciklama

            var icon = weather?.getJSONObject(0)?.getString("icon")
            var resimDosyaadi = resources.getIdentifier("icon_" icon?.sonKarakterisil(),"drawable",packageName)
            imgHavaDurumu.setImageResource(resimDosyaadi)