如何在使用错误的url文本时处理jsoup并且无法连接?

时间:2012-11-26 22:46:14

标签: java android jsoup

我搜索并搜索和测试....包括:/ 6557673 / jsoup-cant-extract-stock-price-from-the the pagepage - 这是我发现的最接近的问题,但我的观点是有点不同。 我正在用动态内容从网址抓取文字。只有网址的最后一段有所不同,例如此处使用问题编号。我的问题是,如果我输入一个不存在的页码,我会立即崩溃,例如:'应用程序意外停止'。它记录'字符串索引超出范围-1'这是有道理的。

在执行该行之前,有没有办法可以像正则表达式inString检查一样?

我的网址字符串如下所示:

"http://whatever.website.com/ + dypageno + ".html";

和代码部分:

try{
    doc = Jsoup.connect(srchStr).get();
        if (doc == null){
            Toast.makeText(this, "Could not locate", Toast.LENGTH_SHORT);
   }else{
   String grabbedtxt = doc.select("h1").text();
   String grabbed=grabbedtxt.substring(grabbedtxt.indexOf("$"));
   grabbed = "Response Today:\r \n \r \n" + grabbed + "\r \n \r \n";
   et.setText(grabbed);}    
   }
catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            et.setText("Page not found.");
        }
}

正如我所说的,这种方法很好用,直到使用了坏网址。我已经尝试将try / catch仅限制为connect语句,不同的异常等无济于事。 我已经剃光了头,所以我没有头发可以拉出来!谁能建议我在这里学到一些东西? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

在您的代码中,您应该检查grabbedtxt是否为空String。在

doc.select ("h1").text ()
如果String标记不存在,

可能会返回空h1。以下代码说明了这一点:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

class Main {
    public static void main(String[] args) throws Exception {
        final Document doc = Jsoup.parse("<html><head/><body/></html");
        String grabbedtxt = doc.select("h1").text();
        if (grabbedtxt.contains("$")) {
            String grabbed = grabbedtxt.substring(grabbedtxt.indexOf("$"));
            System.out.println("Response Today: " + grabbed);
        }
        else {
            System.out.println("No response!");
        }
    }
}

这将打印No response!