Как получить значение в JSON по значению id в классе в Kotlin - PullRequest
0 голосов
/ 13 мая 2019

Я хочу получить значение "temp" в массиве "weather" города, который я ищу, с помощью "названия" города.Я сделал это с помощью цикла for, но он медленный, есть ли другой лучший способ сделать это?

Вот файл JSON: https://ws.smn.gob.ar/map_items/weather

Вот мой код:

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

}

fun fetchJson(view:View){
    println("attemting to fetch JSON")

    val url = "https://ws.smn.gob.ar/map_items/weather"

    val request = Request.Builder().url(url).build()

    val client = OkHttpClient()


    client.newCall(request).enqueue(object: Callback {
        override fun onResponse(call: Call, response: Response) {
            var body = response?.body()?.string()

            println(body)

            val gson = GsonBuilder().create()

            val cities = gson.fromJson<List<Cities>>(body, object : TypeToken<List<Cities>>() {}.type)

            for(city in cities){
                if(city.name.equals(nameOfCity.text.toString())){
                    showsTemp.text = city.weather.temp.toString()
                }}



        }
        override fun onFailure(call: Call, e: IOException) {
            println("Se fallo en establecer la comunicacion")
        }

    })

}

class Cities(val _id:String,
         val name:String,
         val province:String,
         val weather: Weather)
class Weather(val humidity: Int,val temp: Double)

}

1 Ответ

0 голосов
/ 13 мая 2019

Да, вы можете использовать list.find{} для нахождения города с его названием без зацикливания.

Здесь в вашем коде это должно быть так.

val cities = gson.fromJson<List<Cities>>(body, object : TypeToken<List<Cities>>() {}.type)
val cityFounded = cities.find{ it.name == nameOfCity.text.toString() }
showsTemp.text = cityFounded?.weather?.temp.toString()

Надеюсь, это поможетвы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...