Конвертировать списки в презентере kotlin
Пытаюсь выполнить поиск адресов с помощью интерфейса SearchListener от YandexMapkit. В ответ приходит объект Response, в котором содержится список найденных адресов. Так вот, я передаю этот список в презентер, чтобы выполнить проверку на null и пустоту и получить из презентера уже готовый список, который передам в адаптер. Для проверки в лог я вывел размер списка, который получаю из презентера и он оказался равен 0. Думаю проблема именно в презентере.
Метод onSearchResponse. Внутри него переменная list, которая должна получить уже конвертированный список. Этот список я и хочу передать в адаптер, но list.size.toString() выводит 0
override fun onSearchResponse(response: Response) {
val mapObjects = mapView.map.mapObjects
mapObjects.clear()
val list = presenter.convertResponseToCountryModel(response.collection.children)
Log.e("PRESENTER", list.size.toString())
for (searchResult in response.collection.children) {
Log.e("searchResult", searchResult.toString())
val resultLocation = searchResult.obj!!.geometry[0].point
if (resultLocation != null) {
mapObjects.addPlacemark(
resultLocation,
ImageProvider.fromResource(this, R.drawable.ic_address_marker))
Log.e("searchResult", "${resultLocation.latitude} + ${resultLocation.longitude} + ${response.collection.children}")
}
}
}
Метод convertResponseToCountryModel в презентере
fun convertResponseToCountryModel(response: MutableList<GeoObjectCollection.Item>): List<CountryModel> {
for (found in response) {
for (list in listSearchAddress) {
//Название улицы
val street = found.obj
?.metadataContainer
?.getItem(ToponymObjectMetadata::class.java)
?.address
?.components?.firstOrNull { it.kinds.contains(Address.Component.Kind.STREET) }
?.name
//Номер дома
val house = found.obj
?.metadataContainer
?.getItem(ToponymObjectMetadata::class.java)
?.address
?.components?.firstOrNull { it.kinds.contains(Address.Component.Kind.HOUSE) }
?.name
//Проверка на null и пустоту
if (street.isNullOrEmpty()) {
if (house.isNullOrEmpty()) {
list.administrativeArea
?.subAdministrativeArea
?.locality
?.thoroughfare
?.thoroughfareName = "$street"
} else if (house.isNotEmpty()) {
list.administrativeArea
?.subAdministrativeArea
?.locality
?.thoroughfare
?.thoroughfareName = "$street, $house"
}
} else
list.administrativeArea
?.subAdministrativeArea
?.locality
?.thoroughfare
?.thoroughfareName = "$street"
Log.e("Street",list.administrativeArea
?.subAdministrativeArea
?.locality
?.thoroughfare
?.thoroughfareName.toString() )
(listSearchAddress as ArrayList).add(list)
}
}
return listSearchAddress
}
Пробовал напрямую передать список из объекта Response в адаптер и там выполнять проверку на null и пустоту. Это работает, но так как я использую MVP, то хочу перенести эту проверку в презентер
Мой адаптер
class FoundAddressAdapter(
private val listCountryModel: MutableList<GeoObjectCollection.Item>,
private val getCoordinate: ((coordinate: String) -> Unit))
: RecyclerView.Adapter<AddressViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AddressViewHolder {
return AddressViewHolder(LayoutInflater.from(parent.context)
.inflate(R.layout.item_found_addresses, parent, false))
}
override fun onBindViewHolder(holder: AddressViewHolder, position: Int) {
holder.bind(listCountryModel[position])
}
override fun getItemCount() = listCountryModel.size
inner class AddressViewHolder(override val containerView: View) :
RecyclerView.ViewHolder(containerView), LayoutContainer {
fun bind(countryModel: GeoObjectCollection.Item) {
var valueStreet: String = ""
var valueCity: String = ""
var latitude = countryModel.obj?.metadataContainer?.getItem(ToponymObjectMetadata::class.java)?.balloonPoint?.latitude
var longitude = countryModel.obj?.metadataContainer?.getItem(ToponymObjectMetadata::class.java)?.balloonPoint?.longitude
val address = countryModel.obj?.metadataContainer?.getItem(ToponymObjectMetadata::class.java)?.address
?.components
val city = countryModel.obj?.descriptionText
val street = address
?.firstOrNull { it.kinds.contains(Address.Component.Kind.STREET) }
?.name
val house = address
?.firstOrNull { it.kinds.contains(Address.Component.Kind.HOUSE) }
?.name
if (street != null) {
if(street.isNotEmpty()){
if(house.isNullOrEmpty()) {
valueStreet = "$street"
} else if( house.isNotEmpty()) {
valueStreet = "$street, $house"
}
} else
valueStreet = "$street"
}
if(valueStreet.isNotEmpty()){
valueCity = city.toString()
image.setImageDrawable(ContextCompat.getDrawable(
image.context,
R.drawable.ic_address_marker
))
}
textViewStreet.text = valueStreet
textViewCity.text = valueCity
containerView.setOnClickListener {
getCoordinate.invoke("$longitude, $latitude")
}
}
}
}