经过多次尝试,我决定再问一次这个问题。在my last question,有人说我应该看看Jsoup。我写了一些代码,但它不起作用。这是一个Android应用程序。但它完全崩溃了。错误消息:
不幸的是,(appname)已停止
我的代码用于从< div>中提取文本:
public void ButtonClick(View view) throws IOException {
Document doc = dereference("here is my url");
String text = extractContent(doc);
updateUI(text);
}
private Document dereference(String uri) {
Connection connection = Jsoup.connect(uri);
return connection.get();
}
private String extractContent(Document doc) {
Elements divs = doc.select("div.onlinestatus");
return divs.text();
}
private void updateUI(String text) {
TextView tv = (TextView)findViewById(R.id.textView1);
tv.setText(text);
}
来自网址的输入:
<html><!-- [...] --><body>
<div class='onlinestatus'>Server ist online! <br /></div>
</body></html>
有人能发现错误吗?
编辑:当我在一个单独的线程中执行所有这些操作时,我得到一个不同的错误。可以找到错误日志和代码here。
答案 0 :(得分:0)
毕竟这不是一个Jsoup问题。
如果从错误日志(第一行)中查找错误(
)NetworkOnMainThreadException
Google搜索“android NetworkOnMainThreadException”,并page from the android developer reference表示
当应用程序尝试在其主线程上执行网络操作时引发的异常。
这可以解释您之前将代码移动到单独的线程中的尝试,这似乎会产生不同的结果 看一下android开发人员参考中关于设计响应性的page建议。 那应该给你一个答案。
接下来可能失败的是,您需要在创建UI的线程中进行所有UI更改。你得到的CalledFromWrongThreadException here告诉你究竟出了什么问题。查找该错误会引出一个问题+答案,类似于this一个。
如果您遇到问题,我建议您提出一个新问题,如果您的问题尚未涵盖在StackOverflow上(但我相信它是!)