Привет У меня есть следующий код:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button_search.setOnClickListener {
val search = editText_user_search.text.toString()
fetchJson(search)
val intent = Intent(this, WeatherForecast::class.java)
}
}
}
private fun fetchJson(userSearch: String){
println("Attempting to fetch JSON")
val url = "https://api.openweathermap.org/data/2.5/weather?q=$userSearch&appid=MY_API_KEY"
//val url = "https://api.letsbuildthatapp.com/youtube/home_feed"
println("the url is $url")
val request = Request.Builder().url(url).build()
val client = OkHttpClient()
client.newCall(request).enqueue(object : Callback {
override fun onResponse(call: Call, response: Response){
val body = response.body?.string()
val gson = GsonBuilder().create()
val weatherinfo: WeatherInfo = gson.fromJson(body, WeatherInfo::class.java)
}
override fun onFailure(call: Call, e: IOException) {
println("Failed to execute request.")
}
})
}
Идея состоит в том, чтобы взять пользовательский ввод (город), сделать запрос на получение (чтобы получить информацию о погоде для этого города), используйте gson, чтобы повернуть затем он обращается к полям этого объекта, чтобы поместить его в намерение перейти к новому действию.
Проблема здесь в том, что объект, к которому я хочу получить доступ в onCreate, weatherInfo, создается во время функции Функция onResponse внутри функции fetch Json.
Каков наилучший способ передачи этой информации, чтобы я мог добавить к своему намерению следующую строку intent.putStringExtra("City", weatherInfo.name)
, чтобы я мог получить к ней доступ в другой деятельности.
Если есть лучшая практика для решения этой ситуации, я был бы рад узнать!