【问题标题】:Android Jsoup in service - get text of span服务中的Android Jsoup - 获取span的文本
【发布时间】:2012-09-05 09:22:00
【问题描述】:

我对 jsoup 很陌生。几天来,我现在试图从一个跨度中读出一个简单的数字,但没有任何成功。

我希望在这里找到帮助。我的html:

<div class="navi">
<div class="tab mail">
<a href="/comm.php/indexNew/" accesskey="8" title="Messages">
<span class="tabCount">1 </span>
<img src="/b2/message.png" alt="Messages" class="moIcon i24" />
</a>
</div>

虽然在整个文档中,tabCount 类存在 3 次,但我对这个类的第一个跨度感兴趣。 现在我正在尝试在服务的 onCreate() 中创建一个线程:

Thread downloadThread = new Thread() {                     
            public void run() {                                    
                Document doc;                                      
            try {                                              
                doc = Jsoup.connect("https://www.bla.com").get();

                    String count = doc.select("div.navi").select("div.tab.mail").select("a[href]").first().select("tabCount").text();

                Log.d("SOMETHING", "test"+(count));


            } catch (IOException e) {                          
                e.printStackTrace();                           
            }                                                  
        }                                                      
    };                                                         
    downloadThread.start(); 

这会迫使我的应用崩溃。如果我将 text() 更改为 ownText(),也是如此。如果我删除 text() 那么应用程序可以启动,但它给了我 null。

我做错了什么?顺便说一句,除了服务之外,webview 正在加载相同的 url。会不会有问题?

【问题讨论】:

    标签: android hyperlink jsoup title html


    【解决方案1】:

    你不是说.select(".tabCount")吗?

    顺便说一句,在 Android 上 AsyncTasks 比 Threads 更方便。此外,空的 catch 块是一种不好的做法。

    【讨论】:

    • 对不起,是的。我的意思是。你能给我一个 AsyncTask 的例子吗?捕捉空的 catch 块有什么更好的方法?
    【解决方案2】:

    您的选择语句是错误的。您可以将整个选择字符串插入一行。此外,您必须在“tabCount”前面加上一个点,因为它是一个类。

    String count = doc.select("div.navi div.tab.mail a").first().select(".tabCount").text();
    

    【讨论】:

    • 谢谢,但是如果我尝试这样做会使我的应用程序崩溃。 :(
    • 我的应用程序崩溃了,因为它返回 null 但通常您的语句有效!
    【解决方案3】:

    您只需要选择您感兴趣的元素,您不需要之前获取每个外部元素。在您的示例中,您可以尝试

    String count = doc.select("span.tabCount").text();
    

    定义元素类型“span”和类名“.tabcount”的地方

    有关可能对您有所帮助的示例,请查看 this 链接

    编辑:

    试试这个代码,这将得到第一个跨度的值。

    Elements elements = doc.select("span.tabCount");
    String count = elements.first().text();
    

    如果你想打印所有元素,你可以这样做。

    Elements elements = doc.select("span.tabCount");
    for (Element e : elements) {
      Log.d("Something", e.text();
    }
    

    【讨论】:

    • 谢谢。这至少不会使我的应用程序崩溃。在每次我有一个 .text() 结束我的应用程序崩溃之前。现在我仍然没有得到返回的值,但这可能只是因为我不知道我是否使用 log.d 正确。如果我使用 Log.d("SOMETHING", "test"+(count));这应该给我我的价值吗?
    • 是的,日志记录应该可以工作。你在 logcat 中看到了什么? count 得到什么值?检查您的 logcat 以获取您进行日志记录的行?
    • 它只给了我“测试”,但很抱歉。你还没有完整的信息。 tabCount 类在整个文档中出现了 3 次,我对这个类的第一个跨度感兴趣。这可能是一个原因吗?
    • 字符串计数 = doc.select("span.tabCount").first().text();让我的应用崩溃:(
    • 抱歉,还是没有运气。我注意到只有当我使用 .text() 或 .ownText() 专门请求时,应用才会崩溃: String title = doc.title();完美的工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    相关资源
    最近更新 更多