【发布时间】:2020-09-14 23:45:00
【问题描述】:
我正在创建一个 AsyncTaskLoader 我在我的主要活动中覆盖了这个功能:
override fun loadInBackground(): Array<String>? {
return OpenWeatherJsonUtils.getSimpleWeatherStringsFromJson(this@MainActivity, jsonWeatherResponse)
}
请注意,此函数不能接受任何类型,除了:Array
在我的 OpenWeatherJsonUtils.getSimpleWeatherStringsFromJson 函数中,我有以下代码:
@Throws(JSONException::class)
fun getSimpleWeatherStringsFromJson(context: Context, forecastJsonStr: String): Array<String>? {
var parsedWeatherData: Array<String>?
val weatherArray = forecastJson.getJSONArray(OWM_LIST)
parsedWeatherData = arrayOfNulls<String>(weatherArray.length())
for (int i = 0; i < weatherArray.length(); i++) {
parsedWeatherData[i] = "$date - $description - $highAndLow"
}
return parsedWeatherData
}
错误是parsedWeatherData值需要Array
我必须添加或使用什么来返回 Array
请注意,我有一个回收器视图,它显示来自 Internet 的 JSON 文件中的天气数据,我尝试将 toTypedArray() 和 map{} 添加到 arrayOfNulls 但它不起作用
请帮忙 感谢关注。
【问题讨论】:
-
为什么要使用 arraOfNulls 呢?
-
除此之外还有什么建议吗?
-
weatherArray.map ?
-
@Blackbelt JSONArray in android does not extends Collection,所以
for循环和map是不允许的,所以工厂函数应该是正确的选择(也因为 map 创建列表而不是数组,所以需要通过toTypedArray将列表复制到数组中。