Несоответствие типа в Consume<...> в .subscribe (Retrofit, RxJava)
я делаю погодное приложение. Нашел кусочек кода, который был мне необходим, но он был на Java. Я переписал его на Kotlin, но столкнулся с проблемой. (на скриншоте). Создавал переменую я следующим образом:
private lateinit var mService: OpenWeatherMap
после реализовывал интерфейс
private fun getWeatherInformation() {
mService.getWeatherByLatLng(
Common.current_location?.latitude.toString(),
Common.current_location?.longitude.toString(),
Common.API,
"metric"
)
?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(object : Consumer<WeatherResult> {
@SuppressLint("SetTextI18n")
override fun accept(weatherResult: WeatherResult) {
binding.apply {
//Load info
txtCityName.text = weatherResult.name
txtDescription.text = "Weather in ${weatherResult.name}"
txtTemperature.text = "${weatherResult.main?.temp.toString()} °C"
txtDateTime.text = Common.convertUnixToDate(weatherResult.dt)
txtGeoCoord.text = "[ ${weatherResult.coord} ]"
//Display panel
weatherPanel.visibility = View.VISIBLE
loading.visibility = View.GONE
}
}
}, object : Consumer<Throwable> {
override fun accept(t: Throwable) {
Toast.makeText(activity, ""+t.message, Toast.LENGTH_SHORT).show()
}
})
}
Сам интерфейс
interface OpenWeatherMap {
@GET("weather")
fun getWeatherByLatLng(
@Query("lat") lat: String?,
@Query("lon") lng: String?,
@Query("appid") appId: String?,
@Query("units") unit: String?
): Observable<WeatherResult?>?
и класс WeatherResult:
class WeatherResult {
var coord: Coord? = null
var weather: List<Weather>? = null
private val base: String? = null
var main: Main? = null
var visibility = 0
var wind: Wind? = null
var clouds: Clouds? = null
var dt: Long = 0
var sys: Sys? = null
var timezone = 0
var id = 0
var name: String? = null
var cod = 0
}
Получаю следующую ошибку (см. скриншот). С чем связана проблема? Опытным путем нашел, что при создании переменной, вроде как, необходимо указать тип данных в <>, однако при попытке вставить туда какой-либо тип на ошибки ругаться перестает, но говорит, что сюда вставлять тип не следует
private lateinit var mService: OpenWeatherMap<>
Буду очень рад если подскажете как исправить
Красным - unresolved references
Ответы (1 шт):
Чтобы не мучиться самому с дженериками - поручите это котлину, написав так:
.subscribe({result -> /*тут код обработки успеха*/ }, {error -> /*тут код обработки ошибки*/ })

