У меня есть splashScreen с некоторыми запросами на запуск, когда данные загружаются в приложение. Прежде чем инициировать эти запросы splashScreen, я хочу проверить соединение. Эта часть работает нормально, но если приложение не имеет доступа к Интернету, я хочу проверять соединение каждые 2 секунды. Если соединение установлено, я хочу отменить Timer/TimerTask
и выполнить код при вызове Timer
(скрывая переподключение progressBar и Text и снова вызывая api сервера). Но если я запустите этот код ниже, приложение будет аварийно завершать работу без ошибок, видимых в Logcat. Но я вижу, что Reconnecting Log из TimerTask все еще работает.
Я пытался переместить api.splashScreen(this)
и hideReconnectViews()
в класс ReconnectCheck и вызывать их через контекст, но это исключение выброса:
android.view.ViewRoot $ CalledFromWrongThreadException: только исходный поток, создавший иерархию представлений, может касаться его представлений.
Есть идеи, почему мое решение не работает?
Код в активности SplashScreen:
const val RECONNECT_TIME: Long = 2000
if(isOnline()){
api.splashScreen(this)
} else {
showReconnectViews()
val reconnectTimer = Timer()
reconnectTimer.schedule(ReconnectCheck(this, reconnectTimer), 0, RECONNECT_TIME)
createLog("ReconnectCheck ", "TimerFinished")
api.splashScreen(this)
hideReconnectViews()
}
Класс ReconnectCheck:
class ReconnectCheck(val ctx: Context, val timer: Timer): TimerTask() {
override fun run() {
if ((ctx as Splash).isOnline()){
timer.cancel()
timer.purge()
} else {
Log.i("ReconnectCheck: ", "Reconnecting")
}
}
}