SunnySonic
SunnySonic

Reputation: 1336

Android Jsoup in service - get text of span

Im pretty new to jsoup. For days im trying now to read out a simple number from a span without any success.

I hope to find help here. My 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>

The class tabCount excists 3 times though in the whole document and I am interested in the first span with this class. Now I am trying in onCreate() of a service to create a thread with:

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(); 

This forces my app to crash. The same if i change text() to ownText(). if i remove text() then the app can start but it gives me null.

what am i doing wrong? By the way, besides the service a webview is loading the same url. might that be a problem?

Upvotes: 1

Views: 1348

Answers (3)

Zyber
Zyber

Reputation: 1034

You only need to select the element you're interested in, you don't need to get every outer element before. In your example you could try

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

Where you define the type of the element "span" and class name ".tabcount"

For an example that might help you, look at this link

Edit:

Try this code instead, this will get the value of the first span.

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

And if you want to print all elements you could do like this.

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

Upvotes: 2

Flo
Flo

Reputation: 27445

Your select statement is wrong. You can insert the whole selection string in one line. Furthermore you have to prefix "tabCount" with a dot as it is a class.

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

Upvotes: 0

P Varga
P Varga

Reputation: 20269

Haven't you meant .select(".tabCount")?

BTW, on Android AsyncTasks are more convenient than Threads. Also, empty catch blocks are a bad practice.

Upvotes: 1

Related Questions