Поэтому я переделал этот класс, создав новый (PlacesAPI
) для разделения AsyncTask и HTTP-соединения. Кроме того, я добавил еще кое-что, например, requestMethod
, bufferReader
и др. 1012 *. Вместо нового экземпляра класса (я использовал его для передачи данных) я задал параметры методов, которые мне нужно было использовать в других классах. Есть код нового класса:
class PlacesAPIs {
lateinit var result: String
fun getPlacesJSON(c: Context,
lat: Double,
lng: Double,
keyword: String,
type: String,
radius: Int,
language: String
): String {
try {
val key = c.resources.getString(R.string.google_maps_key)
val urlString = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?keyword=$keyword&type=$type&location=$lat,$lng&radius=$radius&language=$language&key=$key"
val url = URL(urlString)
val httpURLConnection = url.openConnection() as HttpURLConnection
httpURLConnection.setRequestProperty("Content-Type", "application/json")
httpURLConnection.requestMethod = "GET"
httpURLConnection.doInput = true
val br = httpURLConnection.inputStream.bufferedReader()
result = br.use { br.readText() }
httpURLConnection.disconnect()
} catch (e: Exception) {
Log.e("Places API:", "the APIM didn't get JSON")
}
return result
}
}
И сейчас мой AsyncTask
выглядит так:
class MapsAsyncTasks(var c: Context, var lat: Double, var lng: Double,
var keyword: String, var type: String, var radius: Int,
var language: String, var map: GoogleMap) : AsyncTask<Any, String, String>() {
override fun doInBackground(vararg params: Any?): String? {
return PlacesAPIs().getPlacesJSON(c, lat, lng, keyword, type, radius, language)
}
override fun onPostExecute(result: String?) {
super.onPostExecute(result)
try {
if(result != null) {
val parentObject = JSONObject(result)
Log.i("ParentObject:",parentObject.toString())
val resultsArray = parentObject.getJSONArray("results")
for (i in 0 until resultsArray.length()) {
val jsonObject = resultsArray.getJSONObject(i)
val locationObject = jsonObject.getJSONObject("geometry").getJSONObject("location")
val latitude = locationObject.getString("lat").toDouble()
val longitude = locationObject.getString("lng").toDouble()
val name = jsonObject.getString("name")
val vicinity = jsonObject.getString("vicinity")
val latLng = LatLng(latitude, longitude)
val markerOptions = MarkerOptions()
markerOptions.title(name)
markerOptions.position(latLng)
markerOptions.snippet(
vicinity
)
map.addMarker(markerOptions)
}
}
} catch (e: JSONException) {
//cathing error here
}
}
}
И это сработало! Прямо сейчас это показывает мне все, что мне нужно! Спасибо всем за помощь.