Получить значение метода onResponse в переменную.
var GLOBAL_VAR:Int? = null
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
doInBackground()
}
private var urlConnection: HttpURLConnection? = null
private var reader: BufferedReader? = null
private var resultJson = ""
private var url = URL("https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&origins=53.7095281,91.4277445&DC&destinations=53.696365,91.386070&mode=driving&key=AIzaSyCJYCg5StSenKMjLgEn3zAbAAwpuBESKQc")
private fun doInBackground() {
// получаем данные с внешнего ресурса
try {
urlConnection = url.openConnection() as HttpURLConnection
urlConnection!!.requestMethod = "GET"
urlConnection!!.connect()
val inputStream = urlConnection!!.inputStream
val buffer = StringBuffer()
reader = BufferedReader(InputStreamReader(inputStream))
var line: String?
do {
line = reader!!.readLine()
if (line == null)
break
buffer.append(line)
} while (true)
resultJson = buffer.toString()
} catch (e: Exception) {
e.printStackTrace()
}
val client = OkHttpClient.Builder()
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.retryOnConnectionFailure(false)
.build()
val request = Request.Builder()
.url(url)
.build()
client.newCall(request).enqueue(object : Callback {
override fun onResponse(call: Call, response: Response?){
val responseString = response!!.body()!!.string()
val resultJson = JSONObject(responseString)
val rows = resultJson.getJSONArray("rows")
val obj = rows.getJSONObject(0)
val elements = obj.getJSONArray("elements")
val element = elements.getJSONObject(0)
val distance = element.getJSONObject("distance")
var value = distance.getInt("value")
value /= 1000
Log.d(LOG_TAG, value.toString())
}
override fun onFailure(call: Call?, e: IOException?) {
Log.d(LOG_TAG, "some error")
}
})
}
companion object {
var LOG_TAG = ">>>>>>>>>>>>>>>>>>>>>>>>LOG>>>>>>>>>>>>>>>>>>>>>>>>"
}
}
В Android нельзя синхронно выполнять запросы к сети, да и зачем? Иначе юзеру пришлось бы смотреть на зависнувшее UI и ждать выполнения каждого вашего запроса. Последуйте следующей логике: вы хотите сделать запрос к сети и сохранить потом что-то в переменную, - в этом состоит ваш вопрос, верно?
Тогда почему бы не построить эту логику по-другому: просто сразу вызывайте нужную вам логику, при получении нужного ответа. Допустим, вы хотите сделать запрос к API какого-то сайта и просто напрямую поместить ответ от сервера в какой-нибудь TextView
- тогда просто делайте запрос к этому API, получайте нужный ответ и передавайте его в метод, который будет содержать вашу логику (например, как я сказал - устанавливать ответ в виде текста на экране).
В котлине есть, например, корутины, или же можно обычным AsynkTask добиться того, чего вы хотите (поместить синхронно данные в переменную) - но зачем?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Пытаюсь загрузить 'bangogg' из папки assets с помощью AssetManager:
Возможно ли авторизовываться в битриксе, допустим, из Java или JS c помощью веб-сервисов? Если нет, то есть какие-нибудь иные способы сделать это?