Как установить глобальное значение внутри метода onResponse () Retrofit и передать функцию переопределения? - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь получить объект 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)
}
...