Я хочу преобразовать из массива в массив?

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