在JSON数据上使用IF语句出错(Android Kotlin)

时间:2018-08-20 18:25:40

标签: android json if-statement kotlin openweathermap

我正在尝试显示5天的天气预报,但openweathermap给我5天/ 3小时的天气。我只想显示15:00的天气。

我正在使用带有日期和时间之一的if语句,如果您看到我的模拟器,它会多次显示相同的日期和时间,并且还会将整个JSON文件显示为空文本。有什么想法吗? enter image description here

这是我的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"

        }

1 个答案:

答案 0 :(得分: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天气数据。您可以通过Google搜索如何使用list.filter {predicate}方法过滤列表。

  1. 解析日期必须以获取15:00:00时间并添加条件(仅适用于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
     }
    

编辑:

向您的适配器类添加var

    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()