2011-08-24 19 views
0

我在代碼中遇到了一個非常奇怪的錯誤。在android 2.3上,以下代碼運行得很好 - 從未在logcat中看到異常。然而,在2.2版本上,這個例外總是發生 - 但是在第二次嘗試時卻設法連接。在Android 2.2中jsoup的問題 - 只能連接第二次嘗試?

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(它仍然顯示HTTPS發生:// ...在例外,但它不應該(?))。另外,當我清理我的eclipse項目時,上面的代碼在沒有異常的情況下工作 - 但只是第一次運行代碼。

哦,並立即發生異常 - 這就像沒有互聯網連接。

我在這裏錯過了什麼?

回答

1

看來JSoup試圖從以前HttpConnection

在第一次嘗試,沒有舊的連接讀取cookies,因此代碼工作正常,但在第二次嘗試,它可能試圖從過去的連接讀取cookies ,這是封閉的,或取消引用。

我沒有去閱讀Android 2.2代碼,但可能對您而言最好的辦法是繼續按照您現在正在做的方式進行操作。

因爲它在2.3上正常工作,所以我很想說這是Android 2.2處理cookie的方式和JSoup處理HttpConnection的方式之間的不匹配。

+0

看來問題是通過添加: 解決System.setProperty(「http.keepAlive」,「false」); 在代碼的開頭。我接受你的答案,因爲它似乎是例外的正確原因。謝謝! –

0

這個問題不僅發生在使用cookie上,而且還發生了兩個使用currentTempDocument = Jsoup.connect(url).get()的簡單連接。 在同一活動中閱讀2個不同的網址:當我嘗試閱讀第二個網址時,只有第二次嘗試是可以的。 這個問題消失如評論所說,即使用

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

或者也可以在問題的建議,即用兩個嵌套的try/catch塊,這樣,當第一次嘗試失敗,第二個確定

相關問題