Я пытаюсь получить объект JSON, который является списком истории путешествий. Мне правильно удалось получить все данные.
Моя цель - рассчитать минимальное расстояние, используя точки длинного широты, доступные в этом списке travel_history. И я тоже этого добился.
Теперь я хочу передать это вычисленное минимальное расстояние lat long функции onMapReady (). Я перепробовал все возможные способы. У меня был поиск по этому поводу, и я обнаружил, что я вызывал CalcualDistance () внутри асинхронного метода onResponse (), поэтому я создал TravelHistoryInterface (), а затем вызвал DistanceCalculator, но ТОЛЬКО ЖЕ РЕЗУЛЬТАТЫ.
Пожалуйста, помогите мне передать destinationLat destinationLong в функции onMapReady ()
PS: Карта работает нормально. Я добавил все необходимые методы. Любая другая вспомогательная функция, такая как distanceCalculator () и все работает отлично.
class MapsActivity : AppCompatActivity(), TravelHistoryInterface, OnMapReadyCallback {
private var mTravelLocations: MutableList<Travel_HistoryDTO> = ArrayList()
private var minDistance: Double = 1000000000.0
lateinit var strList1: List<String>
var mylat: Double = 0.0
var mylung: Double = 0.0
var destinationLat: Double = 0.0
var destinationLong: Double = 0.0
private var locationName: String = " "
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_maps)
apiCall(this)
}
fun apiCall(@Nullable callback: TravelHistoryInterface?) {
val apiInterface = ApiInterface.create().getTravelHistory()
apiInterface.enqueue(
object : Callback<TravelHistoryListDTO> {
override fun onFailure(call: Call<TravelHistoryListDTO>, t: Throwable) {
Log.i("hithere2", "failure")
if (callback != null){
callback.onError(t);
}
}
override fun onResponse(
call: Call<TravelHistoryListDTO>,
response: Response<TravelHistoryListDTO>
) {
val travleLocations = response.body()
if (callback != null){
callback.onSuccess(travleLocations);
}
}
}
)
}
override fun onSuccess(value: TravelHistoryListDTO?) {
value?.travel_history?.let { calculateDistancePart(it) }
mTravelLocations= value?.travel_history!!
}
override fun onError(throwable: Throwable) {
//
}
private fun calculateDistancePart(mmTravel: MutableList<Travel_HistoryDTO>) {
for (items in mmTravel) {
val siz: Int = items.latlong.toString().length
if (items._cn6ca == "15") {
continue
}
for (x in 0 until siz) {
//trim lat lung
strList1 = items.latlong.toString().split(',').map { it.trim() }
}
if (strList1[0].isEmpty() || strList1[1].isEmpty()) {
continue
}
)
val thisDistance: Double = DistanceCalculator(
mylat,
mylung,
strList1[0].toDouble(),
strList1[1].toDouble(),
"K"
)
if (thisDistance < minDistance) {
Log.i("hahai", thisDistance.toString())
minDistance = min(minDistance, thisDistance)
destinationLat = strList1[0].toDouble()
destinationLong = strList1[1].toDouble()
locationName = items.address.toString()
}
}
}
override fun onMapReady(googleMap: GoogleMap?) {
Log.i("bhaiproblem", destinationLat.toString() + " " + destinationLong.toString())
val sydney = LatLng(destinationLat, destinationLong)
googleMap?.addMarker(MarkerOptions().position(sydney).title(locationName))
googleMap?.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 15f))
}
}
// TravelHistoryInterface
interface TravelHistoryInterface {
fun onSuccess(@NonNull value: TravelHistoryListDTO?)
fun onError(@NonNull throwable: Throwable)
}