Функция возвращает ноль - PullRequest
0 голосов
/ 26 апреля 2019

Эта функция получает данные из API.Я не понимаю его процесс.

Здесь проблема,

сначала он вернул weatherModel , а затем выполнил onResponse позже.

Это показывает в logcate Log.d ("data", "Here") first

Моя функция

 fun get(city: String?): WeatherModel? {

    var weatherModel: WeatherModel? = WeatherModel()
    val retrofit =
        retrofit2.Retrofit.Builder().baseUrl(Util.BASE_URL).addConverterFactory(GsonConverterFactory.create())
            .build()
    val service = retrofit.create(WeatherInterface::class.java)
    val call = service.searchCity(city!!, "metric", "789af9673b393eb97f2acdea022f2005")
    call.enqueue(object : Callback<WeatherModel> {

        override fun onFailure(call: Call<WeatherModel>, t: Throwable) {
            Log.d("data", "error ${t.message}")

        }

        override fun onResponse(call: Call<WeatherModel>, response: Response<WeatherModel>) {
            Log.d("data", "success ${response.body()!!.weather!!.size}")
            weatherModel = response.body()
            data!!.getDataTrigger(weatherModel!!)
        }
    })
    Log.d("data", "Here")
    return weatherModel
}

Так в чем проблема?

1 Ответ

0 голосов
/ 26 апреля 2019

Показывается в logcate Log.d ("data", "Here") first

call.enqueue - это асинхронный вызов, что означает, что он не выполняется в главном потокеВот почему вы сначала получите Log.d("data", "Here").

Это причина, по которой вы получаете null возвращено

Если вы используете этот метод асинхронно или в каком-либо сервисеи вы хотите выполнить синхронно, тогда любезно используйте call.execute, но это будет работать только в том случае, если вы используете другой поток, кроме основного потока, так как сетевая операция не разрешена в основном потоке, в этом случае этот метод не вернет null .

Либо вы должны использовать живые данные или интерфейс для обратного вызова для получения WeatherModel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...