Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286

Реализовать таймаут ожидания отклика от сервера во избежание краха приложения

14.08.2014, 04:50. Показов 3232. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообщем есть поток в котором выполняется вот такой кусок кода

Java
1
2
3
4
5
6
           try {
            Document document = Jsoup.connect(link)
                    .get();
            } catch (IOException e) {
            e.printStackTrace();
            }
если вдруг интернет соединение прерывается на секунду и в это время пользователь инициирует парсинг, то приложение крашится. Пытался сделать таймаут при помощи этого

Java
1
Document document = Jsoup.connect(link).timeout(10000).get();
но не получается поток завершает свою работу и приложение крашится уже совсем по другим причинам. Как собствено организовать этот таимаут. Чтоб приложение подождало 10сек например и если сети все еще нет то выкинуло че-нить. Пока в голову приходит толь какой-нить цикл в котором на протяжении 10 секунд проверяется есть ли сеть. Если сеть есть то выход из цикла и выполнение программы в штатном режиме, если нет то ченить другое. Но это на бред похоже больше, чем на решение)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.08.2014, 04:50
Ответы с готовыми решениями:

Как реализовать таймаут ожидания интента?
у меня есть приложение, пишет кое что на карту mifare classic проблема в том, что все проиходит очень быстро, и прикладывая карту, я...

Получение почты (Для операции истекло время ожидания отклика принимающего (РОР) сервера)
При получении почты в MS Outlook появляется вот это: Задача "хххх.х.ххх.хх" -получение сообщила об ошибке (0х8004210А)"Для операции...

Таймаут ожидания
Помогите с кодом мой код тут https://www.cyberforum.ru/delphi-networks/thread156446.html как сделать так чтобы программа ждала...

9
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,082
14.08.2014, 08:13
Аналогично писал тут тему, внятного ответа не дождался.
0
 Аватар для 646kapeh064
59 / 58 / 16
Регистрация: 09.12.2013
Сообщений: 208
14.08.2014, 10:15
Цитата Сообщение от KillAndEat Посмотреть сообщение
Пытался сделать таймаут при помощи этого но не получается поток завершает свою работу и приложение крашится уже совсем по другим причинам
Но ведь таймаут работает? Значит так и делай.
И разбирайся с тем, что за "другая причина" у тебя появляется. Данная проблема имеет явно решения, она не такая сложная.
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
14.08.2014, 21:22  [ТС]
646kapeh064, таймаут НЕ работает! Как я понимаю timeout(10000) значит что приложение должно пытаться законектиться в течение 10 сек. Если конекта нет то все выполняется дальше. У меня нет этих 10 секунд для конекта, поток просто продолжает свою работу. И приложение вылетает из за того что поток возвращает null в связи с тем, что коннекта нет.
0
 Аватар для 646kapeh064
59 / 58 / 16
Регистрация: 09.12.2013
Сообщений: 208
14.08.2014, 21:42
Цитата Сообщение от KillAndEat Посмотреть сообщение
У меня нет этих 10 секунд для конекта, поток просто продолжает свою работу
Значит плохая архитектура )

Простым решением будет, это "присоединится" к потоку, а если точнее, дождаться его завершения.
Если это просто Thread, то метод join
Если это AsyncTask, то это метод public final Result get (long timeout, TimeUnit unit)

Либо поставь while и проверяй какой-нибудь флаг окончания коннекта.

Кстати, ты где пытаешься подконнектится? Полный код можешь кинуть?
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
14.08.2014, 22:53  [ТС]
646kapeh064, loader у меня.

Цитата Сообщение от 646kapeh064 Посмотреть сообщение
Либо поставь while и проверяй какой-нибудь флаг окончания коннекта.
до этого я и сам додумался, просто очень смахивает на велосипед.

Плохая архитектура хмм ... ну может быть. Просто вот от этой строчки для реализации таймаута средствами библиотеки никуда не денешься

Java
1
Document document = Jsoup.connect(link).timeout(10000).get();
и пока складывается впечатление что она както не так работает. Буду исходники смотреть.
0
 Аватар для 646kapeh064
59 / 58 / 16
Регистрация: 09.12.2013
Сообщений: 208
14.08.2014, 23:31
KillAndEat, твоя строчка с коннектом и там где ты ожидаешь ответа, это разные потоки?
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
15.08.2014, 00:53  [ТС]
вот тут выполняется загрузка и парсинг странички

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class t5 extends AsyncTaskLoader<PageInfo> {
   
   
    @Override
    public PageInfo loadInBackground() {
 
try {
            Document document = Jsoup.connect(link)
                    .get();
            } catch (IOException e) {
            e.printStackTrace();
            }
 
        return obj;
    }
}
Тут получаем ответ от потока в методе onLoadFinished и делаем что то в этим ответом. Это разные потоки.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class r4 implements LoaderManager.LoaderCallbacks<PageInfo> {
 
 
    @Override
    public Loader<PageInfo> onCreateLoader(int id, Bundle args) {
        return null;
    }
 
    @Override
    public void onLoadFinished(Loader<PageInfo> loader, PageInfo data) {
 
    }
 
    @Override
    public void onLoaderReset(Loader<PageInfo> loader) {
 
    }
}
Добавлено через 11 минут
Кароч посоны зря я тут бучу поднял) Таймаут не работает только когда соединение полностью оборвано. В этом случае вылетает исключение. А если подключение просто оборвалось то все норм. Вроде так)
0
 Аватар для 646kapeh064
59 / 58 / 16
Регистрация: 09.12.2013
Сообщений: 208
15.08.2014, 17:43
Цитата Сообщение от KillAndEat Посмотреть сообщение
В этом случае вылетает исключение. А если подключение просто оборвалось то все норм
значит надо было вместо e.printStackTrace(); писать return null;
и уже получив результат, сначала сравнить его с null
0
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
15.08.2014, 23:03  [ТС]
646kapeh064, нет, в этом случае есть специальный метод, который предлагает пользователю попробовать загрузить страничку снова.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.08.2014, 23:03
Помогаю со студенческими работами здесь

Установить таймаут ожидания выполнения функции из DLL
Приветствую знатоков и интересующихся. Суть проблемы: Есть довольно громоздкая библиотека от стороннего разработчика для работы с...

Автоматический перезапуск приложения в случае краха
Как правильно реализовать или как избежать перезапуска собственной логикой приложения ?

Копирование файлов в отдельном потоке во избежание зависания приложения
При копировании файла программа полностью зависает. После завершения копирования, программа восстанавливает свою работу. Что нужно...

заедает звук на компьютере: "Таймаут (30000 мс) ожидания для подключения службы 1256477202"
недавно купил новый системник помагите плиз заедает звук при прослушивания музыки или в играх иногда компьютер просто может зависнуть...

Как реализовать синхронизацию самовыделения сервера в одноранговой сети клиент-серверного приложения С#?
Имеется локальная сеть. При появлении клиента в ней, он должен проверить имеется ли сервер, с которым он может соединится, если да то он...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru