Проблема с jsoup в android 2.2 - подключается только со второй попытки? - PullRequest
0 голосов
/ 24 августа 2011

Я столкнулся с очень странной ошибкой в ​​моем коде.На Android 2.3 следующий код работает просто отлично - никогда не вижу исключения в logcat.Тем не менее, на 2.2, исключение всегда происходит - но удается подключиться со второй попытки.

try {
        currentTempDocument = Jsoup.connect(url).cookie("vbscansessionhash", LoginManager.getSessionValue()).get();
    } catch(IOException e) {
        Log.i(TAG, "Exception!", e);
        try {
            currentTempDocument = Jsoup.connect(url).cookie("vbscansessionhash", LoginManager.getSessionValue()).get();
        } catch(IOException e2) {
        }
    }

Исключение, которое я получаю:

java.io.IOException: -1 error loading URL https://www.flashback.org/f4
     at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:387)
     at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:396)
     at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:364)
     at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:143)
     at org.jsoup.helper.HttpConnection.get(HttpConnection.java:132)
     at org.chip2n.flashback.HtmlReader.loadTempDocument(HtmlReader.java:69)
     at org.chip2n.flashback.Browser$7.run(Browser.java:295)

Похоже, точно такая же ошибкапроизойдет, если я переключу https на http в URL-адресе (он все равно показывает https: // ... в исключении, которое не должно (?)).Кроме того, когда я очищаю свой проект Eclipse, приведенный выше код работает без исключения - но только при первом запуске кода.

О, и исключение происходит немедленно - как будто вообще нет подключения к Интернету.

Что мне здесь не хватает?

Ответы [ 2 ]

1 голос
/ 24 августа 2011

Кажется, JSoup пытается прочитать файлы cookie с предыдущего HttpConnection

С первой попытки, старое соединение отсутствует, поэтому код работает нормально, но со второй попытки он может пытатьсячитать файлы cookie из прошлого соединения, которое закрыто или разыменовано.

Я не пошел так далеко, как читал код Android 2.2, но, вероятно, лучший способ для вас - продолжать делать то, что вы естьделаю прямо сейчас.

Поскольку на 2.3 он работает нормально, как и должно быть, я хочу сказать, что это несоответствие между тем, как Android 2.2 обрабатывает файлы cookie, и тем, как JSoup обрабатывает HttpConnection.

0 голосов
/ 29 июля 2013

Эта проблема возникает не только при использовании файлов cookie, но и при двух простых подключениях с использованием currentTempDocument = Jsoup.connect (url) .get ();читать 2 разных URL-адреса в одном и том же упражнении: когда я пытаюсь прочитать второй URL-адрес, разрешается только вторая попытка.Эта проблема исчезает, как предложено в комментарии, т. Е. С использованием

System.setProperty("http.keepAlive", "false");

или также, как предлагается в вопросе, т. Е. С использованием двух вложенных блоков try / catch, так чтоесли первая попытка не удалась, вторая идет нормально

...