我搜索并搜索和测试....包括:/ 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语句,不同的异常等无济于事。 我已经剃光了头,所以我没有头发可以拉出来!谁能建议我在这里学到一些东西? 提前谢谢。
答案 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!
。