我已经尝试了Jsoup网站上给出的Jsoup.connect()
示例,它在Java中运行良好。
出于某种原因,即使我允许AndroidManifest
中的互联网访问权限,我也无法在Android项目(Eclipse)中运行。 Jsoup库已正确安装,我可以使用Jsoup.parse()
而不会出现任何问题。以下是使用Java编写的几行代码以及AndroidManifest
中的权限。
爪哇
public static void main(String[] args){
Document doc;
try {
doc = Jsoup.connect("http://google.ca/").get();
String title = doc.title();
System.out.print(title);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
的AndroidManifest.xml
<uses-sdk android:minSdkVersion="12" />
<uses-permission android:name="android.permission.INTERNET"/>
<application
当我尝试运行它时,崩溃并且日志显示:
01-09 20:19:30.560: E/AndroidRuntime(26839): java.lang.RuntimeException:
Unable to start activity
ComponentInfo{com.mrdroidinator.com/com.mrdroidinator.com.Parselhjmq}: android.os.NetworkOnMainThreadException
答案 0 :(得分:16)
http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html
问题是您正在主线程上执行网络操作,这在API级别11+中是禁止的。这是因为如果您这样做,UI将被“冻结”,直到文档完成下载,因此需要在不同的线程上执行此类操作,这不会影响UI性能。
这是你开始新线程的方式:
Thread downloadThread = new Thread() {
public void run() {
Document doc;
try {
doc = Jsoup.connect("http://google.ca/").get();
String title = doc.title();
System.out.print(title);
} catch (IOException e) {
e.printStackTrace();
}
}
};
downloadThread.start();