Приложение Android аварийно завершает работу, когда Ktor не может подключиться к удаленному URL-адресуAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Приложение Android аварийно завершает работу, когда Ktor не может подключиться к удаленному URL-адресу

Сообщение Anonymous »

Приложение, которое я пытаюсь создать с использованием Kotlin, Dagger-Hilt и Ktor, имеет ViewModel, которое периодически проверяет наличие нового контента на удаленном сервере:

Код: Выделить всё

private fun loadRemoteContent() {
viewModelScope.launch {
val lastUpdateCheck = preferencesRepository.readDate(Settings.LAST_UPDATE_CHECK_DATE)
val lastUpdateCheckDate = LocalDate.ofEpochDay(lastUpdateCheck ?: today.toEpochDay() )

val period = Period.between(lastUpdateCheckDate, today)

if (lastUpdateCheck == null || period.days >= 1) {
val remoteHash = repository.getHash()
val localHash = preferencesRepository.readString(Settings.LOCAL_HASH_STRING)

if (remoteHash != localHash) {
val remoteContent = repository.getAllRemote()
repository.insertAllRemote(remoteContent)

preferencesRepository.setString(Settings.LOCAL_HASH_STRING, remoteHash)
}

preferencesRepository.setDate(Settings.LAST_UPDATE_CHECK_DATE, today.toEpochDay())
}
}
}
В репозитории, в свою очередь, есть следующая функция:

Код: Выделить всё

suspend fun getAllRemote(): List = withContext(backgroundDispatcher) {
ktorHttpClient
.prepareGet("https://someurl.com/remotecontent.json")
.execute { response: HttpResponse ->
val remoteContent = response.body()
remoteContent.map { remote ->
Item(
id = remote.id,
title = remote.title,
summary = remote.summary,
link = remote.link
)
}
}
}
Я настроил Ktor в файле AppModule.kt следующим образом:

Код: Выделить всё

@Provides
@Singleton
fun provideKtorHttpClient(): HttpClient {
return HttpClient(Android) {
expectSuccess = true
install(ContentNegotiation) {
json(
Json {
prettyPrint = true
isLenient = true
ignoreUnknownKeys = true
}
)
}
install(Logging) {
logger = object : Logger {
override fun log(message: String) {
Log.v("http log: ", message)
}
}
level = LogLevel.ALL
}

install(DefaultRequest) {
header(HttpHeaders.ContentType, ContentType.Application.Json)
}

install(HttpRequestRetry) {
retryOnServerErrors(maxRetries = 5)
exponentialDelay()
}
}
}
При запуске без подключения к Интернету на эмуляторе в Android Studio Logcat показывает, что приложение пытается установить соединение 5 раз, а затем вылетает только с этим сообщением:< /p>

Код: Выделить всё

2023-05-09 22:36:42.321 31747-31747 AndroidRuntime          com.example.myapp          E  FATAL EXCEPTION: main
Process: com.example.myapp, PID: 31747
Может ли кто-нибудь помочь мне понять, чего мне не хватает в конфигурации Ktor или функциях, чтобы при отсутствии подключения к Интернету приложение могло продолжать работать без сбоев?
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/762 ... remote-url
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»