Использование оператора IF для данных JSON идет не так (Android Kotlin)

Я пытаюсь отобразить прогноз погоды на 5 дней, но карта openweathermap дает мне прогноз погоды на 5 дней / 3 часа. Я хочу отображать только погоду в 15:00.

Я использую оператор if с одним из даты и времени, и если вы видите мой эмулятор, он отображает одну и ту же дату и время много раз, а также отображает весь файл JSON в виде пустых текстов. Есть идеи по этому поводу, пожалуйста? Использование оператора IF для данных JSON идет не так (Android Kotlin)

Вот мое заявление if

if (weatherFor.dt_txt= = "2018-08-21 00:00:00") {
            holder?.view?.textWeatherDataForecast?.text = "${weatherFor.weather.map { it.description }.joinToString(",")} on ${date}"
            holder?.view?.tempTextForecast?.text = weatherFor.main.temp.toString() + "°C"

        }

не могли бы вы вставить образец ответа?

karthik prasad 20.08.2018 20:54

@karthikprasad Что вы имеете в виду? (извините, я новичок в этом)

Alex Kolydas 20.08.2018 21:04

вы можете поделиться своим объектом ForecastWeatherList?

rafa 21.08.2018 05:03
0
3
145
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Итак, вам нужно изменить пару вещей.

  1. Оператор IF, который вы добавили, просто задает текст для условия, а остальные оставьте со строками по умолчанию. Для этого нужно изменить код, как показано ниже. Это удалит ваши лишние TextViews.

    if (weatherFor.dt_txt= = "2018-08-21 00:00:00") 
    {
           holder?.view?.textWeatherDataForecast?.text = "${weatherFor.weather.map { it.description }.joinToString(",")} on ${date}"
        holder?.view?.tempTextForecast?.text = weatherFor.main.temp.toString() + "°C"
    
    }
    else
    { 
         holder?.view?.visibility = View.GONE
    }
    

Но в идеале вы должны фильтровать свой ответ, чтобы в списке были только данные о погоде на 15:00. вы можете погуглить, как фильтровать список, используя метод list.filter {predicate}.

  1. Дата синтаксического анализа должна быть выполнена таким образом, чтобы получить время 15:00:00 и добавить условие if только для 15:00:00.

     val localDateFormat = SimpleDateFormat("HH:mm:ss")
    val dt_time: String = localDateFormat.format(date)
    
     if (dt_time == "15:00:00"){
            // your set holder text goes here
     }
    

Отредактировано:

Добавьте переменную в свой класс адаптера

    lateinit var weatherList: List<ForecastWeatherList>

Добавить блок инициализации

    init{
        weatherList = forecastfeed.list.filter{ //add your condition here this should plain condition which gives true or false like it.dt_txt = = "15:00:00" }
    }

Внутри вашего getItemCount () замените

    weatherList.count()

Огромное спасибо !!! Теперь проблема в том, что он отображает то, что я хочу, но с большим белым промежутком. Как мы можем вообще не добавлять элементы, если время не в 3 часа?

Alex Kolydas 21.08.2018 09:27

вы должны фильтровать содержимое списка по времени. Отредактировал ответ. Пожалуйста, примите и проголосуйте за ответ, если он поможет.

rafa 21.08.2018 13:55

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