Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
#1

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

14.08.2014, 04:50. Просмотров 1017. Ответов 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 секунд проверяется есть ли сеть. Если сеть есть то выход из цикла и выполнение программы в штатном режиме, если нет то ченить другое. Но это на бред похоже больше, чем на решение)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2014, 04:50     Реализовать таймаут ожидания отклика от сервера во избежание краха приложения
Посмотрите здесь:
Android Синхронизация приложения и сервера
Android Нужно реализовать клиент-сервер. За счет сервера выступает parse
Реализовать плагины для приложения Android
Как реализовать автозапуск приложения при включении устройства? Basic4Android
Android Ребят нужен технический совет по созданию приложения для для вывода ошибок с сервера
Android Как реализовать обмен данными между копиями одного приложения, установленными на разных устройствах
Анимация ожидания Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
14.08.2014, 08:13     Реализовать таймаут ожидания отклика от сервера во избежание краха приложения #2
Аналогично писал тут тему, внятного ответа не дождался.
646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 206
14.08.2014, 10:15     Реализовать таймаут ожидания отклика от сервера во избежание краха приложения #3
Цитата Сообщение от KillAndEat Посмотреть сообщение
Пытался сделать таймаут при помощи этого но не получается поток завершает свою работу и приложение крашится уже совсем по другим причинам
Но ведь таймаут работает? Значит так и делай.
И разбирайся с тем, что за "другая причина" у тебя появляется. Данная проблема имеет явно решения, она не такая сложная.
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
14.08.2014, 21:22  [ТС]     Реализовать таймаут ожидания отклика от сервера во избежание краха приложения #4
646kapeh064, таймаут НЕ работает! Как я понимаю timeout(10000) значит что приложение должно пытаться законектиться в течение 10 сек. Если конекта нет то все выполняется дальше. У меня нет этих 10 секунд для конекта, поток просто продолжает свою работу. И приложение вылетает из за того что поток возвращает null в связи с тем, что коннекта нет.
646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 206
14.08.2014, 21:42     Реализовать таймаут ожидания отклика от сервера во избежание краха приложения #5
Цитата Сообщение от KillAndEat Посмотреть сообщение
У меня нет этих 10 секунд для конекта, поток просто продолжает свою работу
Значит плохая архитектура )

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

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

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

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

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

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

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 минут
Кароч посоны зря я тут бучу поднял) Таймаут не работает только когда соединение полностью оборвано. В этом случае вылетает исключение. А если подключение просто оборвалось то все норм. Вроде так)
646kapeh064
59 / 58 / 15
Регистрация: 09.12.2013
Сообщений: 206
15.08.2014, 17:43     Реализовать таймаут ожидания отклика от сервера во избежание краха приложения #9
Цитата Сообщение от KillAndEat Посмотреть сообщение
В этом случае вылетает исключение. А если подключение просто оборвалось то все норм
значит надо было вместо e.printStackTrace(); писать return null;
и уже получив результат, сначала сравнить его с null
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2014, 23:03     Реализовать таймаут ожидания отклика от сервера во избежание краха приложения
Еще ссылки по теме:
Анимация ожидания Android
Цикл в режим ожидания Android
Прозрачный диалог ожидания Android
Android Диалог ожидания при запуске активности
Android Распознавание речи и клавиатура - время ожидания - необычное поведение

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

Или воспользуйтесь поиском по форуму:
KillAndEat
63 / 63 / 8
Регистрация: 17.05.2013
Сообщений: 286
15.08.2014, 23:03  [ТС]     Реализовать таймаут ожидания отклика от сервера во избежание краха приложения #10
646kapeh064, нет, в этом случае есть специальный метод, который предлагает пользователю попробовать загрузить страничку снова.
Yandex
Объявления
15.08.2014, 23:03     Реализовать таймаут ожидания отклика от сервера во избежание краха приложения
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru