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

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

Войти
Регистрация
Восстановить пароль
 
TanaTiX
Модератор
2746 / 1592 / 146
Регистрация: 19.02.2011
Сообщений: 5,737
#1

Предотвратить выключение программы при загрузке и парсинге сайтов средствами Jsoup - Программирование Android

05.10.2016, 19:11. Просмотров 198. Ответов 6
Метки нет (Все метки)

Есть вот такой код для загрузки и парсинга сайтов. Если сюда скормить левый адрес для загрузки или при обработки Jsoup будет непойми что, естественно, выползает ошибка и приложение крашится.
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
public class Loader extends AsyncTask<String, Void, String>{
 
        private Resource resource;
        private Document doc;
        @Override
        protected String doInBackground(String... params) {
            Log.w("parse", "" + params[0]);
            //System.out.print(params);
            resource = DatabaseSingleton.getInstance().getDataBase().getResourceById(Integer.parseInt(params[0]));
            doc = null;
            try {
                Log.w("parse", "" + resource.get_link());
                doc = Jsoup.connect(resource.get_link()).get();
                String title = doc.title();
                Log.w("parse", title);
            } catch (IOException e) {
                //e.printStackTrace();
                doc = null;
            }
            return null;
        }
 
        @Override
        protected void onPostExecute(String success) {
            super.onPostExecute(success);
            if (success.equals("true")) {
                Log.w("parse", "complete good");
            }else {
                Log.w("parse", "complete bed");
                Toast.makeText(adapter.getContext(),"Error loading", Toast.LENGTH_SHORT).show();
            }
            Log.w("parse", "complete");
            hash.put(resource.get_id(), false);
 
            Elements element = doc.select(resource.get_html());
            String string = element.html();
            String hash = DatabaseSingleton.md5(string);
 
            DatabaseHelper db = DatabaseSingleton.getInstance().getDataBase();
            ContentValues contentValues = new ContentValues();
            contentValues.put(Resource.NAME_DATE_CHANGE, System.currentTimeMillis());
            if(hash == DatabaseSingleton.getInstance().getDataBase().getResourceById(resource.get_id()).get_hash()){
                Log.w("parse", "hash not changed");
                contentValues.put(Resource.NAME_STATUS, Resource.STATUS_DEFAULT);
            }else {
                if(db.getResourceById(resource.get_id()).getStatus() != Resource.STATUS_DEFAULT){
                    contentValues.put(Resource.NAME_STATUS, Resource.STATUS_UNVIEWED);
                }
                contentValues.put(Resource.NAME_HASH, hash);
                Log.w("parse", "new change");
            }
            db.updateData(resource, contentValues);
            adapter.updateAllView();
            DatabaseSingleton.getInstance().getActivity().onListUpdate(true);
 
        }
 
    }
Как сделать так, что бы приложение не прекращала работу, а только ограничивалось сообщением об ошибке (Toast.makeText вполне подойдет)?
Заранее спасибо.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2016, 19:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Предотвратить выключение программы при загрузке и парсинге сайтов средствами Jsoup (Программирование Android):

Реализовать многопоточность при парсинге сайтов - Python
Привет парни!) есть код ,но вообще не отстреливаю как реализовать многопоточность ... возможно кто то подскажет... в двух...

Чем вы пользуетесь при парсинге сложных сайтов? - C++ Builder
Собственно САБЖ.

Предотвратить открывание всех пунктов меню при загрузке - jQuery
есть такое меню: &lt;div id=&quot;menu&quot;&gt; &lt;ul id=&quot;accordion&quot;&gt; &lt;li id=&quot;m1&quot;&gt; ГЛАВНЫЙ ПУНКТ 1 &lt;ul&gt; &lt;li&gt;&lt;a...

Выключение ПК при загрузке Windows - Windows 7
Доброго дня суток, Буду очень благодарен если кто то сможет помочь какими либо советами или уже имеет опыт с похожей ситуацией. При...

Писк при выключение, загрузке ОС - Windows 8, 8.1
Ситуация такова: 1. при выключение Windows 8.1, компьютер пищит. 2. при последующей загрузке OpenSUSE 13.1 не удается примонтировать...

Выключение и перезагрузка ПК при загрузке игры - Компьютерное железо
С недавнего времени появилась проблема. Комп работает до того момента, пока не загрузить игру. Происходит выключение ПК и перезагрузка без...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,799
Завершенные тесты: 1
05.10.2016, 19:23 #2
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
   @Override
    protected void onPostExecute(String success) {
        super.onPostExecute(success);
        if (success.equals("true")) {
            Log.w("parse", "complete good");
            Log.w("parse", "complete");
            hash.put(resource.get_id(), false);
 
            Elements element = doc.select(resource.get_html());
            String string = element.html();
            String hash = DatabaseSingleton.md5(string);
 
            DatabaseHelper db = DatabaseSingleton.getInstance().getDataBase();
            ContentValues contentValues = new ContentValues();
            contentValues.put(Resource.NAME_DATE_CHANGE, System.currentTimeMillis());
            if(hash == DatabaseSingleton.getInstance().getDataBase().getResourceById(resource.get_id()).get_hash()){
                Log.w("parse", "hash not changed");
                contentValues.put(Resource.NAME_STATUS, Resource.STATUS_DEFAULT);
            }else {
                if(db.getResourceById(resource.get_id()).getStatus() != Resource.STATUS_DEFAULT){
                    contentValues.put(Resource.NAME_STATUS, Resource.STATUS_UNVIEWED);
                }
                contentValues.put(Resource.NAME_HASH, hash);
                Log.w("parse", "new change");
            }
            db.updateData(resource, contentValues);
            adapter.updateAllView();
            DatabaseSingleton.getInstance().getActivity().onListUpdate(true);
        }else {
            Log.w("parse", "complete bed");
            Toast.makeText(adapter.getContext(),"Error loading", Toast.LENGTH_SHORT).show();
        }
 
    }
не?
1
TanaTiX
Модератор
2746 / 1592 / 146
Регистрация: 19.02.2011
Сообщений: 5,737
05.10.2016, 19:36  [ТС] #3
Паблито, на данный момент ошибка в блоке try-catch в строке
Java
1
doc = Jsoup.connect(resource.get_link()).get();
10-05 19:34:51.820 25544-26197/com.tanatix.checkinternetresourceschanges E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.tanatix.checkinternetresourceschanges, PID: 25544
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.IllegalArgumentException: Malformed URL: link
at org.jsoup.helper.HttpConnection.url(HttpConnection.java:76)
at org.jsoup.helper.HttpConnection.connect(HttpConnection.java:36)
at org.jsoup.Jsoup.connect(Jsoup.java:73)
at com.tanatix.checkinternetresourceschanges.UpdateController$Loader.doInBackground(UpdateController.java:70)
at com.tanatix.checkinternetresourceschanges.UpdateController$Loader.doInBackground(UpdateController.java:58)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)*
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)*
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)*
at java.lang.Thread.run(Thread.java:841)*
Caused by: java.net.MalformedURLException: Protocol not found: link
at java.net.URL.<init>(URL.java:176)
at java.net.URL.<init>(URL.java:125)
at org.jsoup.helper.HttpConnection.url(HttpConnection.java:74)
at org.jsoup.helper.HttpConnection.connect(HttpConnection.java:36)*
at org.jsoup.Jsoup.connect(Jsoup.java:73)*
at com.tanatix.checkinternetresourceschanges.UpdateController$Loader.doInBackground(UpdateController.java:70)*
at com.tanatix.checkinternetresourceschanges.UpdateController$Loader.doInBackground(UpdateController.java:58)*
at android.os.AsyncTask$2.call(AsyncTask.java:288)*
at java.util.concurrent.FutureTask.run(FutureTask.java:237)*
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)*
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)*
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)*
at java.lang.Thread.run(Thread.java:841)*
0
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,799
Завершенные тесты: 1
05.10.2016, 19:49 #4
а если там ловить исключение?
Java
1
2
3
4
5
            try {
                doc = Jsoup.connect("тут был какой-то код").get();
            } catch (MalformedURLException e) {
                // как-то реагируем и дальше уже не пытаемся обрабатывать ответ от сервера
            }
1
TanaTiX
Модератор
2746 / 1592 / 146
Регистрация: 19.02.2011
Сообщений: 5,737
06.10.2016, 11:37  [ТС] #5
Паблито, так эта строка и так в трай-кэтче. Или заморочка с MalformedURLException?

Добавлено через 15 часов 34 минуты
Паблито, нет, android studio требует именно IOException, иначе выдает ошибку.
0
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,799
Завершенные тесты: 1
06.10.2016, 11:54 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
                boolean success = false;
                Document doc = null;
                try {
                    try {
                        doc = Jsoup.connect("ht1tp://ya.ru").get();
                        String title = doc.title();
                        success = true;
                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                // где-то там, дальше делаем return success;
Добавлено через 59 секунд
или даже так
Java
1
2
3
4
5
6
7
8
9
10
                boolean success = false;
                Document doc = null;
                try {
                    doc = Jsoup.connect("ht1tp://ya.ru").get();
                    String title = doc.title();
                    success = true;
                } catch (IOException | IllegalArgumentException e) {
                    e.printStackTrace();
                }
                // где-то там, дальше делаем return success;
1
TanaTiX
Модератор
2746 / 1592 / 146
Регистрация: 19.02.2011
Сообщений: 5,737
06.10.2016, 12:57  [ТС] #7
Паблито, с небольшими правками, но помогло, спасибо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2016, 12:57
Привет! Вот еще темы с ответами:

Выключение звука видео при загрузке .muted - jQuery
Добрый день. Сайт reka63.ru . По умолчанию при загрузке страницы звук работать не должен. На Хроме работает, хотя консоль браузера...

Предотвратить выключение компьютера на некоторое время - C#
Направьте меня о Гуру С#. Мне необходимо сделать следующее. Если вдруг компьютер выключается, то перед этим программа, которая уже...

Предотвратить падение программы при отключении интернета - C#
Имеется софт, который работает с сетью. Бывает такое, что интернет на секунду-другую разорвётся и софт выдаёт ошибку. Как вылечить это?...

Как убрать зависание программы при парсинге - Visual Basic .NET
Собственно есть программа, которая парсит некоторые значения. Ф-ия парса: Public Shared Function Pars(ByRef strSource As String,...


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

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

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