2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
1

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

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

Author24 — интернет-сервис помощи студентам
Здрвствуйте!Нашел код для парсинга данных с сайта через 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.01.2015, 17:43
Ответы с готовыми решениями:

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

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

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

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

17
411 / 275 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
04.01.2015, 01:40 2
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
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
04.01.2015, 03:25  [ТС] 3
dajver, Спасибо за ответ. В месте комментария "выполняем какой-то код" там должен быть метод или вообще все содержимое. Я просто не понимаю, где именно должен участвовать код, приведенный вами выше. Т.е. как должен выглядеть весь код в итоге. Я пытался его вставить на угад и при запуске прогресс крутился,а потом приложение выбивало. И в конечном итоге я не знаю как его применить.
0
411 / 275 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
04.01.2015, 12:32 4
Как то так. Правда я не компилировал его, если будет падать скиньте лог с ошибкой.
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
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
04.01.2015, 16:26  [ТС] 5
dajver, прога не вылетает,но "Loading" крутится бесконечно,как будто dialog.dismiss(); не срабатывает.
0
411 / 275 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
04.01.2015, 17:10 6
Видать таки не срабатывает) вынесите его за пределы try \ catch
0
28 / 28 / 10
Регистрация: 24.05.2013
Сообщений: 157
05.01.2015, 13:00 7
И каждый раз пользователь будет ждать по 10 сек, чтобы данные дождаться? Даже если на это уйдет 1-2-3 сек? А если дольше, чем 10 сек? Вы в каком-то месте кода получаете эти данные, вот и закрывайте диалог после той строчки кода.

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

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

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

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

И будет диалог открываться/закрываться своевременно. А задавать произвольное время для показа диалога ну совсем-совсем не правильно.
1
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
06.01.2015, 20:25  [ТС] 10
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
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
08.01.2015, 23:40  [ТС] 11
Sony17, dajver, Печаль-беда(((На устройстве приложение не хочет рабтать т.е. устройство не может спарсить данные (или не успевает) и срабатывает catch...хотя на эмуляторе все ОК.
Как быть в таких ситуациях?
Заранее спасибо.
0
411 / 275 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
08.01.2015, 23:50 12
Код ошибки покажите
0
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
09.01.2015, 01:05  [ТС] 13
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 и в манифесте стоит
Код
<uses-sdk android:minSdkVersion="10"/>
Это так на всякий случай.
0
411 / 275 / 22
Регистрация: 18.09.2010
Сообщений: 1,114
09.01.2015, 02:07 14
Не может такого быть что бы не было ошибок, уберите try catch и посмотрите в лог после того как приложение падает.
0
28 / 28 / 10
Регистрация: 24.05.2013
Сообщений: 157
09.01.2015, 12:59 15
Java
1
2
3
// Этот код выполняется в UI потоке, причем getBlogStats() работает с сетью. В android 4.xx нельзя работать с сетью в UI потоке.
// От этого приложение и крашится.
((TextView)findViewById(R.id.tv)).setText(getBlogStats());
0
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
11.01.2015, 14:57  [ТС] 16
Sony17, выходит,что решение проблемы решит только AsyncTasc?
0
28 / 28 / 10
Регистрация: 24.05.2013
Сообщений: 157
11.01.2015, 16:17 17
Kroshandowski, не единственное. Но для данной задачи AsyncTask подходит идеально.
0
2 / 2 / 4
Регистрация: 05.04.2013
Сообщений: 234
11.01.2015, 20:29  [ТС] 18
Sony17, Ок...спасибо за все советы)
0
11.01.2015, 20:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.01.2015, 20:29
Помогаю со студенческими работами здесь

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

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

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

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

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

Как повесить событие на option?
При нажатие на add в список добавляется новое строка (В select добавляется новый узел option и...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru