#android #kotlin
#Android #kotlin
Вопрос:
У меня есть этот String
массив:
var parsedWeatherData: Array<String>?
И я хочу добавить некоторые данные о погоде из файла JSON, используя этот код:
val weatherArray = forecastJson.getJSONArray(OWM_LIST)
parsedWeatherData = arrayOfNulls<String>(weatherArray.length())
Ошибка в том, что parsedWeatherData
требуется Array<String>?
, а не Array<String?>
. Как я могу изменить значение с arrayOfNulls()
на тип Array<String>?
?
Комментарии:
1.
filterNotNull
может быть, это сработает для вас?
Ответ №1:
Array<String>?
в основном означает, что это будет либо нулевое значение, либо массив строк.
Array<String?>
означает, что массив будет содержать нулевые или строковые значения.
Вам будет лучше изменить тип parsedWeatherData
на Array<String?>
, если вы уверены, что позже не присвоите ему нулевое значение. Если вы хотите, чтобы он оставался таким же, Array<String>?
тогда вы можете использовать
parsedWeatherData = weatherArray.map { it }.toTypedArray()
Ответ №2:
Чтобы создать массив с ненулевыми значениями, вам нужно использовать конструктор с лямбдой, который инициализирует каждый элемент в массиве, вот так:
val weatherArray = forecastJson.getJSONArray(OWM_LIST)
parsedWeatherData = Array(weatherArray.length()) { index ->
weatherArray[index]
}
И пара предложений… Со списками немного проще работать, и вы можете сделать их ненулевыми и просто оставить их пустыми, когда в них нет данных. Тогда вам не нужно обрабатывать нулевые случаи. Итак, я бы сделал это так:
// The property:
var parsedWeatherData: List<String> = emptyList()
// Parsing data:
val weatherArray = forecastJson.getJSONArray(OWM_LIST)
parsedWeatherData = List(weatherArray.length()) { index ->
weatherArray[index]
}
Ответ №3:
Функция arrayOfNulls()
возвращает массив объектов строкового типа с заданным размером, инициализированный значениями null.
Так parsedWeatherData
, очевидно, Array<String?>
потому что значения равны нулю.
Если вам нужно Array<String>
или Array<String>?
, вам нужно убедиться, что все строки, содержащиеся в массиве, НЕ равны нулю.
Если вы думаете, что вам следует сделать что-то вроде этого:
val weatherList = mutableListOf<String>()
for (i in 0 until weatherArray.length()) {
weatherList.add(weatherArray.getString(i))
}
parsedWeatherData = weatherList.toTypedArray()