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

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

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

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

14.08.2014, 04:50. Просмотров 1066. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2014, 04:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализовать таймаут ожидания отклика от сервера во избежание краха приложения (Программирование Android):

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

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

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

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

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

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

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

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

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

Создание клиент сервера (TCP): не поступило отклика или компьютер отверг подключение - Visual Basic .NET
делаю так (сервер ) : Dim tcpListener As New TcpListener(Me._Port) tcpListener.Start() LOG(&quot;Ожидание...

Реализовать таймаут - C++
Допустим есть пишем класс обвертку над winsocks. Как реализовать таймаут соединения. К примеру есть метод класса, при вызове...

Реализовать таймаут PHP pthreads - PHP ООП
&lt;?php /** * Author: Abu Ashraf Masnun * URL: http://masnun.me */ //define(&quot;TMT&quot;,3); class WorkerThreads extends Thread ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.08.2014, 23:03
Ответ Создать тему
Опции темы

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