关闭 Jsoup 连接

Posted

技术标签:

【中文标题】关闭 Jsoup 连接【英文标题】:Closing Jsoup Connection 【发布时间】:2012-12-27 11:52:06 【问题描述】:

我需要一些帮助来了解 Jsoup 的基础知识。以下代码有效,但我想知道是否需要以某种方式关闭连接。在 Jsoup 网站上找不到任何关于它的信息。如果在后台执行方法后应用程序保持不变,我每五分钟左右在 log cat 中收到一条消息,说“请求时间失败:java.net.SocketException:协议不支持地址族”。所以我想确保我没有不必要地消耗数据。谢谢。

            protected String doInBackground(String... params) 
        // TODO Auto-generated method stub
        try 
        //  connect to web page based on user input
            Document doc = Jsoup.connect(routeURL).get();


        //  select relevant page elements
            Elements fareStageNumbers = doc.getElementsByClass("fare_stages_inner_table");

       //   test printing out fare stage numbers
            for(Element div : fareStageNumbers)

                Log.v(TAG, div.text());

            



         catch (IOException e) 
            // TODO Auto-generated catch block
            e.printStackTrace();
        
        return null;
    

logcat 消息:

    01-12 20:58:28.755: D/SntpClient(78): request time failed: java.net.SocketException: Address family not supported by protocol
    01-12 21:03:28.765: D/SntpClient(78): request time failed: java.net.SocketException: Address family not supported by protocol
    01-12 21:08:28.775: D/SntpClient(78): request time failed: java.net.SocketException: Address family not supported by protocol

【问题讨论】:

【参考方案1】:

Jsoup在请求完成后自行关闭连接:

// from 'org.jsoup.helper.HttpConnection' class
static HttpConnection.Response execute(Connection.Request req, HttpConnection.Response previousResponse) throws IOException 
    // ...
    HttpURLConnection conn = createConnection(req);
    HttpConnection.Response res;
    try 
        // ...
     finally 
        // per Java's documentation, this is not necessary, and precludes keepalives. However in practise,
        // connection errors will not be released quickly enough and can cause a too many open files error.
        conn.disconnect();
    
    // ...

例外:您的网址是否包含协议(网址以例如http:// 开头)?

【讨论】:

嗨,谢谢,太好了!是的,url 以 http:// 开头。我不知道那是什么意思。我应该使用www。代替? 不,如果您的网址以 http:// 开头,一切正常。你能发布你异常的堆栈跟踪吗? 我已经发布了 logcat 中出现的内容。它继续像这样每五分钟打印一次相同的消息。 http://***.com/questions/4163375/debug-sntpclient60-request-time-failed-java-net-socketexception-address-fam 在另一个堆栈溢出帖子中找到了这个。 “SNTP 是网络时间协议。模拟器尝试获取实际时间。我认为,这与您的应用无关。”

以上是关于关闭 Jsoup 连接的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 proguard 关闭力的 jsoup 关闭

类似 Node.js 的 Jsoup 库 [关闭]

还有比Jsoup更快的HTML搜刮吗?[关闭]

TagSoup vs. Jsoup vs. HTML Parser vs. HotSax vs [关闭]

如何在java中提取网页文本内容? [关闭]

使用 Java 从 Web 中提取数据 [关闭]