Jsoup och try/catch

Diskussion i 'Frågor, support och diskussion' startad av noname.olsson, 25 jun 2012.

  1. noname.olsson

    noname.olsson Teen Droid Medlem

    Blev medlem:
    10 dec 2009
    Inlägg:
    360
    Mottagna gillanden:
    8

    MINA ENHETER

    Tjena!
    Försöker mig på att använda Jsoup i en app för att kunna hämta information från webbsidor. Min kod ser ut som följande:

    Kod:
    public class WOLActivity extends Activity {	
    	/** Variable declaration */
    	private boolean bFullscreen = false;
    	static final int DIALOG_CLEARCACHE_ID = 0;
    	static final int DIALOG_CHANGELOG_ID = 1;
    	static final int DIALOG_FAVORITE_ID = 2;
    	public final static String CURRENT_URL = "com.nonameolsson.WOLActivity.CURRENT_URL";
    	
    	// blog url
    	public static final String BLOG_URL = "http://xjaphx.wordpress.com/";
    	
    	/** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {  	
            super.onCreate(savedInstanceState);
            
            setContentView(R.layout.main);
            
            try {                                              
            	((TextView)findViewById(R.id.tv)).setText(getBlogStats());                     
            } catch (Exception ex) {                          
            	((TextView)findViewById(R.id.tv)).setText("Error");                           
            }                                                                                                                    
        }
    
        protected String getBlogStats() throws Exception {
        	String result = "";
        	// get html document structure
        	Document document = Jsoup.connect(BLOG_URL).get();
        	// selector query
        	Elements nodeBlogStats = document.select("div#blog-stats ul li");
        	// check results
        	if(nodeBlogStats.size() > 0) {
        		// get value
        		result = nodeBlogStats.get(0).text();
        	}
        	result = nodeBlogStats.get(0).text();
        	// return
        	return result;
        }    
    
    Är det någon som kan se vad det är för fel? Jag har inte jättebra koll på hur man bör debugga heller, men jag har med breakpoints kollat. Det verkar som att den hoppar ur på
    Kod:
        	// get html document structure
        	Document document = Jsoup.connect(BLOG_URL).get();
        	// selector query
        	Elements nodeBlogStats = document.select("div#blog-stats ul li");
    Och då ser jag att den alltid går in i catch efter try och ger värdet Error.

    Vad har jag gjort för fel?
     
  2. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 okt 2009
    Inlägg:
    2 349
    Mottagna gillanden:
    835
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Sätt en breakpoint på: ((TextView)findViewById(R.id.tv)).setText("Error");
    När debuggern stannar där så kollar du vad ex innehåller. Det brukar oftast stå i hyffsat bra klartext vad som gått fel i variablerna message eller cause.

    Tips:
    Försök att dela upp din kod på lite fler rader. Då blir det enklare att se vad som händer och det går att debugga rad för rad.
    Till exempel:
    ((TextView)findViewById(R.id.tv)).setText(getBlogStats());
    blir:
    TextView tv = (TextView)findViewById(R.id.tv);
    String blogStats = getBlogStats();
    tv.setText(blogStats);

    Kompilatorn ser till att optimera allt så det är inget du behöver syssla med. Skriv din kod så att den blir så läsbar och lätt att följa som möjligt.

    Nu är iofs inte tv särskilt bra variabelnamn utan döp den till vad den är. Kanske blogStatsText eller liknande är bättre.
     
  3. noname.olsson

    noname.olsson Teen Droid Medlem

    Blev medlem:
    10 dec 2009
    Inlägg:
    360
    Mottagna gillanden:
    8

    MINA ENHETER

    Tack för tipset! Har ändrat om strukturen på koden lite nu. Mer lättlast.
    Men problemet kvarstår, när jag sätter en breakpoint på ((TextView)findViewById(R.id.tv)).setText("Error"); och kollar värdet på ex blir jag inte mer klok. detailMessage är null och cause är NetworkOnMainThreadException :S Ska försöka kolla upp vad det kan betyda.
     
    Last edited: 25 jun 2012
  4. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 okt 2009
    Inlägg:
    2 349
    Mottagna gillanden:
    835
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast