Код отрабатывает нормально только в дебаггера , при простом запуске не отрабатывает
Я подключил Yandex map kit к anroid приложению , для того чтобы строить маршруты , логику вынес в ViewModel , когда ставлю точки остановки на определенные строки (укажу их комментарием в коде) , то все работает должным образом , но когда просто запускю приложение построение маршрута не отрабатывает
fun initRoutes(mapView: MapView, searchView: EditText) {
mapview = mapView
val points: MutableList<RequestPoint> = ArrayList()
points.add(RequestPoint(ROUTE_START_LOCATION, RequestPointType.WAYPOINT, null))
points.add(RequestPoint(ROUTE_END_LOCATION, RequestPointType.WAYPOINT, null))
mapObjects = mapview.getMap().getMapObjects().addCollection();
mtRouter = TransportFactory.getInstance().createPedestrianRouter()
mtRouter!!.requestRoutes(points, TimeOptions(), this) //break point
searchField = searchView
var mapKit = MapKitFactory.getInstance()
locationMapKit = mapKit.createUserLocationLayer(mapview.mapWindow)
locationMapKit.isVisible = true
}
fun requestLocationPermissions() {
if (ActivityCompat.checkSelfPermission(
APP_ACTIVITY,
Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(
APP_ACTIVITY,
Manifest.permission.ACCESS_COARSE_LOCATION
)
!= PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(
APP_ACTIVITY,
arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
),
REQUEST_CODE_PERMISSIONS
)
return
}
}
override fun onMasstransitRoutes(routes: MutableList<Route>) {
if (routes.size > 0) {
for (section in routes[0].sections) {
drawSection( //break point
SubpolylineHelper.subpolyline(
routes[0].geometry, section.geometry
)
)
}
}
}
override fun onMasstransitRoutesError(error: Error) {
var errorMessage = "Unknown error"
if (error is RemoteError) {
errorMessage = "Remote error"
} else if (error is NetworkError) {
errorMessage = "Network error"
}
Toast.makeText(APP_ACTIVITY, errorMessage, Toast.LENGTH_SHORT).show()
}
private fun drawSection(
geometry: Polyline
) {
val polylineMapObject = mapObjects!!.addPolyline(geometry)
polylineMapObject.setStrokeColor(R.color.main_blue) //break point
}
Это код ViewModel
override fun onStart() {
super.onStart()
initialization()
}
private fun initialization() {
mViewModel = ViewModelProvider(this)[MapFragmentViewModel::class.java]
mapview = mBinding.mapview
mapview!!.getMap().move(
CameraPosition(Point(43.02706910205296, 131.88667688630807), 15.0f, 0.0f, 0.0f),
Animation(Animation.Type.SMOOTH, 0F),
null
)
MapKitFactory.getInstance().onStart();
mapview!!.onStart();
mViewModel.requestLocationPermissions()
mViewModel.initRoutes(mapview!!,mBinding.searchViewMap)
var mapKit = MapKitFactory.getInstance()
}
Это код самого фрагмента
Ответы (1 шт):
Автор решения: Михаил Петров
→ Ссылка
Проблема в
mtRouter!!.requestRoutes(points, TimeOptions(), this) //break point
requestRoutes возвращает Session и данную сессию надо где-то сохранить, так как именно она хранит и делает запрос
Когда стоит брэкпоинт, то запрос успевает отработать и всё хорошо
Без брэкпоинта сессия удаляется быстрее чем успевает придти ответ и поэтому ничего не происходит