Jsoup Android解析

阿德里安·伊瓦斯库(Adrian Ivasku)

我正在解析一个网页...现在完成后...我看到我正在做一件非常愚蠢的事情,所以如果有人可以向我指出这一点:)正确的方向是什么。

我有一个使用Jsoup的Android应用程序,它运行良好,但运行速度非常慢!我知道原因...因为基本上onCreate我有20,30个Jsoup getElement请求...

 private class Task extends AsyncTask<Void, Void, Void>{
    String linkText;
    @Override
    protected Void doInBackground(Void... params) {
        Initdata();

        return null;
    }
    @Override
    protected void onPostExecute(Void param) {

        mProgressBarHandler.hide();           

        redraw();
        inflatedView.invalidate();
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mProgressBarHandler.show();
    }
}

在Initdata()方法中,我有20-30个Jsoup请求。即使使用AsyncTask,它也非常慢,现在唯一的区别是我没有阻塞UI线程,这很不错,但是我需要以某种方式“优化”这些元素的解析。

private void Initdata(){

    loadImages();
    players = new String[] {util.GetElement("div.item-2:first-child", "http://www.istinomer.rs/", 0),
            util.GetElement("div.item-2:nth-child(2)", "http://www.istinomer.rs/", 0),
            util.GetElement("div.item-2:nth-child(3)", "http://www.istinomer.rs/", 0),
            util.GetElement("div.item-2:nth-child(4)","http://www.istinomer.rs/",0),
            util.GetElement("div.item-2:nth-child(5)","http://www.istinomer.rs/",0),
            util.GetElement("div.item-2:nth-child(6)","http://www.istinomer.rs/",0),
            util.GetElement("div.item-2:nth-child(7)","http://www.istinomer.rs/",0),
            util.GetElement("div.item-2:nth-child(8)","http://www.istinomer.rs/",0),
            util.GetElement("div.item-2:nth-child(9)","http://www.istinomer.rs/",0),
            util.GetElement("div.item-2:nth-child(10)","http://www.istinomer.rs/",0)
    };
 vestiDescription1 = util.GetElement("div.item-big h2", "http://www.istinomer.rs/", 0) + System.getProperty("line.separator")
            + util.GetElement("div.item-big h3","http://www.istinomer.rs/",0);

    vestiDescription2 = util.GetElement("div.grid-8 h2 a", "http://www.istinomer.rs/", 0) + System.getProperty("line.separator")
            + util.GetElement2("div.grid-8 h3","http://www.istinomer.rs/",0);

    vestiDescription3 = util.GetElement(
            "div.gd-container-1:nth-child(6) > div:nth-child(4) > div:nth-child(1) > div:nth-child(4) > div:nth-child(2) > h3:nth-child(2)", "http://www.istinomer.rs/", 0);

    vestiDescription4 = util.GetElement(
            "div.gd-container-1:nth-child(6) > div:nth-child(4) > div:nth-child(1) > div:nth-child(5) > div:nth-child(2) > h3:nth-child(2)", "http://www.istinomer.rs/", 0);

    vestiDescription5 = util.GetElement(
            "div.gd-container-1:nth-child(6) > div:nth-child(4) > div:nth-child(1) > div:nth-child(6) > div:nth-child(2) > h3:nth-child(2)", "http://www.istinomer.rs/", 0);

    vestiDescription6 = util.GetElement(
            "div.gd-container-1:nth-child(6) > div:nth-child(5) > div:nth-child(1) > div:nth-child(2) > h2:nth-child(4)", "http://www.istinomer.rs/", 0) + System.getProperty("line.separator")
            + util.GetElement2("div.gd-container-1:nth-child(6) > div:nth-child(5) > div:nth-child(1) > div:nth-child(2) > h3:nth-child(5)","http://www.istinomer.rs/",0);

    vestiDescription7 = util.GetElement(
            "div.gd-container-1:nth-child(6) > div:nth-child(5) > div:nth-child(1) > div:nth-child(3) > div:nth-child(2) > h3:nth-child(2)", "http://www.istinomer.rs/", 0);

    vestiDescription8 = util.GetElement(
            "div.gd-container-1:nth-child(6) > div:nth-child(5) > div:nth-child(1) > div:nth-child(4) > div:nth-child(2) > h3:nth-child(2)", "http://www.istinomer.rs/", 0);

    vestiDescription9 = util.GetElement(
            "div.gd-container-1:nth-child(6) > div:nth-child(5) > div:nth-child(1) > div:nth-child(5) > div:nth-child(2) > h3:nth-child(2)", "http://www.istinomer.rs/", 0);

    vestiDescription10 = util.GetElement(
            "div.gd-container-1:nth-child(6) > div:nth-child(5) > div:nth-child(1) > div:nth-child(6) > div:nth-child(2) > h3:nth-child(2)", "http://www.istinomer.rs/", 0);
currency = new String[]{
            vestiDescription1,
            vestiDescription2,
            vestiDescription3,
            vestiDescription4,
            vestiDescription5,
            vestiDescription6,
            vestiDescription7,
            vestiDescription8,
            vestiDescription9,
            vestiDescription10
    };

public String GetElement(String Element, String site, int mode) {
    try {

        Elements newsHeadlines = null;

        if (mode == 0) {
            Document doc = Jsoup.connect(site).timeout(600000).get();
            newsHeadlines = doc.select(Element);
        }
        //1 gets link from class
        else if (mode == 1) {
            Document doc = Jsoup.connect(site).timeout(600000).get();
            String link = doc.select(Element).toString();
            return link;
        }

        //Log.d("TMS", "Data is " + html2text(newsHeadlines.toString()));

        String returnData = html2text(newsHeadlines.toString());
        return returnData;
    }
    catch (Exception e) {
        Log.d("TMS", "EXCEPTION GetElement: " + Element);
        e.printStackTrace();
        return "Error";
    }

知道如何加快速度吗?

道格·史蒂文森

您要求在每次调用GetElement时重复分析同一文档!当然慢了!

而是,对JSoup进行一次调用以获取文档,然后对所有针对该文档的查询使用它返回的Document对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章