Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234

Как повесить прогресс диалог секунд на 10?

03.01.2015, 17:43. Показов 1945. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здрвствуйте!Нашел код для парсинга данных с сайта через jsoup. Так вот...иногда данные загружаются долго (зависит от скорости моб.интернета) и тогда я подумал повесить как бы прелоадером progressDialog секунд так на 10.
Т.е. диалог должен висеть пока не пройдет 10 сек (за это время думаю данные спарсятся) ну или что-то вроде пока не загрузит тег класса например: "div#blog-stats ul li" ,а потом pd.dismiss();
Вот сам код парсинга:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
 
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
 
public class JSoupStudyActivity extends Activity {
 
    // blog url
    static final String BLOG_URL = "http://xjaphx.wordpress.com/";
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // set layout view
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        // process
        try {
            ((TextView)findViewById(R.id.tv)).setText(getBlogStats());
        } catch (Exception ex) {
            ((TextView)findViewById(R.id.tv)).setText("Error");
        }
    }
 
    protected String getBlogStats() throws Exception {
        String result = "";
        // get html document structure
        Document document = Jsoup.connect(BLOG_URL).get();
        // selector query
        Elements nodeBlogStats = document.select("div#blog-stats-2 ul li");
        // check results
        if(nodeBlogStats.size() > 0) {
            // get value
            result = nodeBlogStats.get(0).text();
        }
 
        // return
        return result;
    }
}
Сам код рабочий...я проверял. Вот только не знаю,как на его основе впихнуть диалоги,асинхтаксы,бэгроундворкеры и т.д.
Заранее спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.01.2015, 17:43
Ответы с готовыми решениями:

Как создать диалог выбора шрифта и диалог выбора цвета
как создать диалог выбора шрифта и диалог выбора цвета в wpf

В этой программе создается "матрица" из секунд.Как мне первый ряд чисел (секунд) присвоить масиву?
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include...

Как повесить событие
Добрый день есть код canvas.onmouseup = function (event) { if (flags.pencil === true) { canvas.onclick = function (event) { ...

17
 Аватар для dajver
411 / 275 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
04.01.2015, 01:40
Java
1
2
3
4
5
6
7
8
9
10
11
12
ProgressDialog dialog = new ProgressDialog(this);
dialog.setMessage("Loading...");
dialog.show();
Runnable runnable = new Runnable() {
                        @Override
                        public void run() {
                               // выполняем какой то код
                              Thread.sleep(1000); // 1 секунда
                              dialog.dismiss();
                        }
};
new Thread(runnable).start();
0
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
04.01.2015, 03:25  [ТС]
dajver, Спасибо за ответ. В месте комментария "выполняем какой-то код" там должен быть метод или вообще все содержимое. Я просто не понимаю, где именно должен участвовать код, приведенный вами выше. Т.е. как должен выглядеть весь код в итоге. Я пытался его вставить на угад и при запуске прогресс крутился,а потом приложение выбивало. И в конечном итоге я не знаю как его применить.
0
 Аватар для dajver
411 / 275 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
04.01.2015, 12:32
Как то так. Правда я не компилировал его, если будет падать скиньте лог с ошибкой.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class JSoupStudyActivity extends Activity {
 
    // blog url
    static final String BLOG_URL = "http://xjaphx.wordpress.com/";
    private ProgressDialog dialog;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // set layout view
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        dialog = new ProgressDialog(this);
        dialog.setMessage("Loading...");
        dialog.show();
        Runnable runnable = new Runnable() {
            @Override
                public void run() {
                     // process
                    try {
                        ((TextView)findViewById(R.id.tv)).setText(getBlogStats());
                        Thread.sleep(1000); // 1 секунда
                        dialog.dismiss();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    } catch (Exception ex) {
                        ((TextView)findViewById(R.id.tv)).setText("Error");
                    }
                }
        };
        new Thread(runnable).start();
    }
 
    protected String getBlogStats() throws Exception {
        String result = "";
        // get html document structure
        Document document = Jsoup.connect(BLOG_URL).get();
        // selector query
        Elements nodeBlogStats = document.select("div#blog-stats-2 ul li");
        // check results
        if(nodeBlogStats.size() > 0) {
            // get value
            result = nodeBlogStats.get(0).text();
        }
 
        // return
        return result;
    }
}
1
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
04.01.2015, 16:26  [ТС]
dajver, прога не вылетает,но "Loading" крутится бесконечно,как будто dialog.dismiss(); не срабатывает.
0
 Аватар для dajver
411 / 275 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
04.01.2015, 17:10
Видать таки не срабатывает) вынесите его за пределы try \ catch
0
28 / 28 / 10
Регистрация: 24.05.2013
Сообщений: 157
05.01.2015, 13:00
И каждый раз пользователь будет ждать по 10 сек, чтобы данные дождаться? Даже если на это уйдет 1-2-3 сек? А если дольше, чем 10 сек? Вы в каком-то месте кода получаете эти данные, вот и закрывайте диалог после той строчки кода.

P.S. про код выше: Вы там с UI работаете в новом потоке, чего делать нельзя. Вся работа с UI должна быть в UI потоке.
0
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
05.01.2015, 21:34  [ТС]
Sony17, Здравствуйте! Да,я жду пока спарсится числовое значение из класса "div#blog-stats-2 ul li" со страницы сайта. Просто когда инет слабый,кажется что данные вообще не подгружаются и только спустя несколько секунд появляются. Вот я и подумал о progressDialog'e. Только как его повесить на код приведенный ТС не знаю.
0
28 / 28 / 10
Регистрация: 24.05.2013
Сообщений: 157
05.01.2015, 22:13
Kroshandowski,

Как ни крути, вам парсить страницу нужно в новом потоке, вот и используйте AsyncTask. В методе onPreExecute() вызывайте диалог: пихаете сюда весь код, чтобы показать диалог (show()).

В методе doInBackground() начинайте парсить страницу: сюда пихаете весь код что имеете, который парсит страницу. Здесь никакой работы с UI! Как только получите 'числовое значение из класса "div#blog-stats-2 ul li" со страницы сайта', метод завершает работу и срабатывает метод onPostExecute().

В onPostExecute() методе у Вас уже будет получено 'числовое значение из класса "div#blog-stats-2 ul li" со страницы сайта', так что можно закрывать диалог: dismiss().

И будет диалог открываться/закрываться своевременно. А задавать произвольное время для показа диалога ну совсем-совсем не правильно.
1
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
06.01.2015, 20:25  [ТС]
dajver, Sony17, всем спасибо за наводки. В итоге сделал вот так и все работает как надо без таймеров, т.е. когда все данные из
Java
1
getBlogStats
загрузились появляются
Java
1
((TextView)findViewById(R.id.tv)).setText(getBlogStats());
Вот код...может кому пригодится.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public class JSoupStudyActivity extends Activity {
 
    // blog url
    static final String BLOG_URL = "http://xjaphx.wordpress.com/";
    ProgressDialog progress;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // set layout view
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        progress = ProgressDialog.show(this, "Загрузка данных",
                "Подождите...", true);
 
        new Thread(new Runnable() {
            @Override
            public void run()
            {
                try {
                    getBlogStats();
                } catch (Exception e) {
                    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                }
 
                runOnUiThread(new Runnable() {
                    @Override
                    public void run()
                    {
                        // process
                        try {
                            ((TextView)findViewById(R.id.tv)).setText(getBlogStats());
                        } catch (Exception ex) {
                            ((TextView)findViewById(R.id.tv)).setText("Error");
                        }
                        progress.dismiss();
                    }
                });
            }
        }).start();
 
     }
 
    protected String getBlogStats() throws Exception {
        String result = "";
        // get html document structure
        Document document = Jsoup.connect(BLOG_URL).get();
        // selector query
        Elements nodeBlogStats = document.select("div#blog-stats-2 ul li");
        // check results
        if(nodeBlogStats.size() > 0) {
            // get value
            result = nodeBlogStats.get(0).text();
        }
 
        // return
        return result;
    }
}
0
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
08.01.2015, 23:40  [ТС]
Sony17, dajver, Печаль-беда(((На устройстве приложение не хочет рабтать т.е. устройство не может спарсить данные (или не успевает) и срабатывает catch...хотя на эмуляторе все ОК.
Как быть в таких ситуациях?
Заранее спасибо.
0
 Аватар для dajver
411 / 275 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
08.01.2015, 23:50
Код ошибки покажите
0
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
09.01.2015, 01:05  [ТС]
dajver, там не то чтобы ошибка и выбивает (на телефоне же лог не посмотришь),а просто срабатывает catch
Java
1
2
3
4
5
 try {
                            ((TextView)findViewById(R.id.tv)).setText(getBlogStats());
                        } catch (Exception ex) {
                            ((TextView)findViewById(R.id.tv)).setText("Error");
                        }
И вместо числовых данных (там статистика с сайта парсится) выходит Error прописанный в catch. Просто странно...почему на реальном девайсе не рботает так,как работает на эмуляторе?

P.S. эмулятор у меня Android 2.3,а на телефоне Android 4.4 и в манифесте стоит
Code
1
<uses-sdk android:minSdkVersion="10"/>
Это так на всякий случай.
0
 Аватар для dajver
411 / 275 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
09.01.2015, 02:07
Не может такого быть что бы не было ошибок, уберите try catch и посмотрите в лог после того как приложение падает.
0
28 / 28 / 10
Регистрация: 24.05.2013
Сообщений: 157
09.01.2015, 12:59
Java
1
2
3
// Этот код выполняется в UI потоке, причем getBlogStats() работает с сетью. В android 4.xx нельзя работать с сетью в UI потоке.
// От этого приложение и крашится.
((TextView)findViewById(R.id.tv)).setText(getBlogStats());
0
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
11.01.2015, 14:57  [ТС]
Sony17, выходит,что решение проблемы решит только AsyncTasc?
0
28 / 28 / 10
Регистрация: 24.05.2013
Сообщений: 157
11.01.2015, 16:17
Kroshandowski, не единственное. Но для данной задачи AsyncTask подходит идеально.
0
 Аватар для Kroshandowski
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
11.01.2015, 20:29  [ТС]
Sony17, Ок...спасибо за все советы)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.01.2015, 20:29
Помогаю со студенческими работами здесь

Как повесить hover?
Всем привет! Есть блок с фоновым изображением как повесить hover именно на это изображение? div { background:url(); } ...

Как повесить функцию на клавишу?
Как сделать, чтобы по нажатию на клавишу (пробел, enter или ещё что-нибудь), если окно активно и независимо от того, на каком элементе...

Как повесить кнопку на функцию
Хочу поставит кнопку на функцию using System; using System.Drawing; using System.ComponentModel; using System.Windows.Forms; ...

Как повесить событие из скрипта?
интересует следующая ситуация: есть на странице картинки &lt;img id=&quot;...&quot; name=&quot;...&quot; /&gt; както так. я могу понабивать события на каждую...

Как повесить изображение на кнопку?
Всем привет! Хочу просто создать кнопку с изображением, но выдает ошибку. Делаю так: Button ok = new Button(&quot;ok&quot;, new...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru