我正在尝试显示5天的天气预报,但openweathermap给我5天/ 3小时的天气。我只想显示15:00的天气。
我正在使用带有日期和时间之一的if语句,如果您看到我的模拟器,它会多次显示相同的日期和时间,并且还会将整个JSON文件显示为空文本。有什么想法吗?
这是我的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"
}
答案 0 :(得分: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}方法过滤列表。
解析日期必须以获取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()