繁体   English   中英

Jsoup未连接到Android Studio中的网页

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM