Intereting Posts
Как генерировать serialVersionUID для исключений kotlin? Стереть внутренний статус объекта в тесте Почему Kotlin позволяет иметь два класса с одинаковым именем и пакетом в разных папках (например, main и androidTest)? Как вы скрываете параметры в шагах пользовательской сборки в Kotlin для TeamCity? Треки жестов с сервисного андроида Доступ к статической функции расширения из другого класса в Котлине? Получение java.lang.VerifyError при создании запроса String с использованием Android Volley в Котлине Как инициализировать контрольную переменную в Котлине В Котлине ошибка Джексона по десериализации с классом данных Как преобразовать метод класса <T> #cast из Java в Kotlin? Есть ли способ скомпилировать класс Kotlin для JavaScript с помощью Gradle? Как получить текущее имя файла класса в kotlin Как перевести java-интерфейс в kotlin Как произвольно генерировать строку и цвет, которые произвольно строятся в студии Android Только первый тест проходит с TestScheduler при запуске нескольких тестов (Kotlin)

kotlin coroutine throws java.lang.IllegalStateException: уже возобновлено, но получил значение Место

Я совершенно новичок в разработке программ Kotlin и Android в целом. Во время игры, чтобы понять, как это работает, я столкнулся с ошибкой, которую я не могу решить.

Из основного действия я пытаюсь подключиться к googleApiClient. Разрешения в порядке. Я хочу использовать kotlin coroutines для получения обновлений местоположения из LocationManager в прямом стиле, чтобы позже использовать этот объект Location. В первый раз, когда я изменил свою позицию в эмуляторе, он отлично работает, во второй раз, когда я меняю свое положение, он выходит из строя с таким исключением:

FATAL EXCEPTION: main Process: com.link_value.eventlv, PID: 32404 java.lang.IllegalStateException: Already resumed, but got value Location[gps 48.783000,2.516180 acc=20 et=+59m16s372ms alt=0.0 {Bundle[mParcelledData.dataSize=40]}] at kotlinx.coroutines.experimental.AbstractContinuation.resumeImpl(AbstractContinuation.kt:79) at kotlinx.coroutines.experimental.AbstractContinuation.resume(AbstractContinuation.kt:72) at com.link_value.eventlv.View.Create.NewEventLvActivity$await$2$1.onLocationChanged(NewEventLvActivity.kt:100) at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:297) at android.location.LocationManager$ListenerTransport.-wrap0(LocationManager.java) at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:242) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_new_event_lv) askForUserLocation() val locationManager = this.getSystemService(Context.LOCATION_SERVICE) as LocationManager val presenter = CreateEventPresenterImpl(this@NewEventLvActivity) googleApiClient = GoogleApiClient.Builder(this@NewEventLvActivity) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Places.GEO_DATA_API) .addConnectionCallbacks(this) .build() } override fun onConnected(p0: Bundle?) { val locationManager = this.getSystemService(Context.LOCATION_SERVICE) as LocationManager input_address.addTextChangedListener(object: TextWatcher{ override fun afterTextChanged(p0: Editable?) { } override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { } override fun onTextChanged(query: CharSequence?, p1: Int, p2: Int, p3: Int) { if (query.toString().length >= 4) { launch(UI) { val locationUpdated = locationManager.await(LocationManager.GPS_PROVIDER) input_name.text = Editable.Factory.getInstance().newEditable(locationUpdated.toString()) } } } }) } private suspend fun LocationManager.await(locationProvider: String): Location? = suspendCoroutine { cont -> try { requestLocationUpdates(locationProvider, 0, 0.toFloat(), object : LocationListener { override fun onStatusChanged(p0: String?, p1: Int, p2: Bundle?) { } override fun onProviderEnabled(p0: String?) { } override fun onProviderDisabled(p0: String?) { cont.resumeWithException(UnknownLocationException()) } override fun onLocationChanged(location: Location?) { cont.resume(location) } }) } catch (ex: SecurityException) { cont.resumeWithException(ex) } } 

Это как если бы Котлин использовал одно и то же продолжение. Я не знаю, что я делаю неправильно, и почему он падает во второй раз. Может кто-нибудь просветить меня. Заранее спасибо.