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

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

Восстановить пароль Регистрация
 
TanaTiX
Модератор
 Аватар для TanaTiX
2731 / 1576 / 144
Регистрация: 19.02.2011
Сообщений: 5,658
05.10.2016, 19:11     Предотвратить выключение программы при загрузке и парсинге сайтов средствами Jsoup #1
Есть вот такой код для загрузки и парсинга сайтов. Если сюда скормить левый адрес для загрузки или при обработки 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 вполне подойдет)?
Заранее спасибо.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2016, 19:11     Предотвратить выключение программы при загрузке и парсинге сайтов средствами Jsoup
Посмотрите здесь:

Вылет приложения при работе с jsoup Android
jsoup Android
Сбой при загрузке на android 4 Android
Ориентация экрана при загрузке данных Android
Автофокус при загрузке страницы Android
Ошибка при парсинге страницы сайта Android
Ошибка при загрузке темы Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
не спать!
1874 / 1608 / 496
Регистрация: 12.05.2014
Сообщений: 5,815
Завершенные тесты: 1
05.10.2016, 19:23     Предотвратить выключение программы при загрузке и парсинге сайтов средствами Jsoup #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();
        }
 
    }
не?
TanaTiX
Модератор
 Аватар для TanaTiX
2731 / 1576 / 144
Регистрация: 19.02.2011
Сообщений: 5,658
05.10.2016, 19:36  [ТС]     Предотвратить выключение программы при загрузке и парсинге сайтов средствами Jsoup #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)*
Паблито
не спать!
1874 / 1608 / 496
Регистрация: 12.05.2014
Сообщений: 5,815
Завершенные тесты: 1
05.10.2016, 19:49     Предотвратить выключение программы при загрузке и парсинге сайтов средствами Jsoup #4
а если там ловить исключение?
Java
1
2
3
4
5
            try {
                doc = Jsoup.connect("тут был какой-то код").get();
            } catch (MalformedURLException e) {
                // как-то реагируем и дальше уже не пытаемся обрабатывать ответ от сервера
            }
TanaTiX
Модератор
 Аватар для TanaTiX
2731 / 1576 / 144
Регистрация: 19.02.2011
Сообщений: 5,658
06.10.2016, 11:37  [ТС]     Предотвратить выключение программы при загрузке и парсинге сайтов средствами Jsoup #5
Паблито, так эта строка и так в трай-кэтче. Или заморочка с MalformedURLException?

Добавлено через 15 часов 34 минуты
Паблито, нет, android studio требует именно IOException, иначе выдает ошибку.
Паблито
не спать!
1874 / 1608 / 496
Регистрация: 12.05.2014
Сообщений: 5,815
Завершенные тесты: 1
06.10.2016, 11:54     Предотвратить выключение программы при загрузке и парсинге сайтов средствами Jsoup #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;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2016, 12:57     Предотвратить выключение программы при загрузке и парсинге сайтов средствами Jsoup
Еще ссылки по теме:

Android Вылетает приложении при загрузке шрифта
Скачать файл при загрузке Android
Android Jsoup
Ошибка при парсинге или как лучше сделать? Android

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

Или воспользуйтесь поиском по форуму:
TanaTiX
Модератор
 Аватар для TanaTiX
2731 / 1576 / 144
Регистрация: 19.02.2011
Сообщений: 5,658
06.10.2016, 12:57  [ТС]     Предотвратить выключение программы при загрузке и парсинге сайтов средствами Jsoup #7
Паблито, с небольшими правками, но помогло, спасибо.
Yandex
Объявления
06.10.2016, 12:57     Предотвратить выключение программы при загрузке и парсинге сайтов средствами Jsoup
Ответ Создать тему
Опции темы

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