[英]Jsoup not connecting to webpage in Android Studio
我现在正在做一个项目,我在一个类中使用带有函数retrieveMedia的jsoup,以便返回一个填充了来自网页的数据的ArrayList。 我在一个线程中运行它,因为您不应该从主线程连接到 URL。 我运行它并加入它。 但是,它不起作用(我在 Eclipse 中测试了与 Android Studio 分开的相同代码,它运行良好)。 似乎无论我做什么,我都无法让 jsoup 连接到网页。 下面是我的班级 MediaRetriever。
public class MediaRetreiever {
public ArrayList<Media> retrieveMedia() {
ArrayList<Media> mediaOutput = new ArrayList<Media>(); //Store each scraped post
Thread downloadThread = new Thread(new Runnable() {
public void run() {
Document doc = null;
try {
doc = Jsoup.connect(<Website Im connecting to>).timeout(20000).get();
} catch (IOException e) {
System.out.println("Failed to connect to webpage.");
mediaOutput.add(new Media("Failed to connect", "oops", "", "oh well"));
return;
}
Elements mediaFeed = doc.getElementById("main").getElementsByClass("node");
for (Element e : mediaFeed) {
String title, author, imageUrl, content;
title=e.getElementsByClass("title").text().trim();
author=e.getElementsByClass("content").tagName("p").select("em").text().trim();
content=e.getElementsByClass("content").text().replace(author,"").trim();
Media media = new Media(title, author, "", content);
mediaOutput.add(media);
}
}
});
downloadThread.start();
try {
downloadThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
return mediaOutput;
}
}
从另一个类运行这个类的方法,它永远不会连接。 有任何想法吗?
由于您说问题仅在 Android 中仍然存在,因此您应该将用户代理字符串添加到您的请求中 - 首先获取正确显示站点的浏览器的用户代理字符串,然后将其添加到请求中:
doc = Jsoup.connect(<Website Im connecting to>)
.userAgent("your-user-agent-string")
.timeout(20000).get();
作为旁注 - 如果您正在捕获异常,请不要打印您自己的错误消息 - 打印原始消息,它可能非常有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.