如何使用Jsoup获取图像并传递给ImageView

时间:2013-10-26 22:35:45

标签: java android jsoup

美好的一天,

我正在尝试使用Jsoup检索图像,但我不确定我应该从网站获得什么。我已经使用以下代码从网站上阅读,并且能够获取图像特定标题及其链接到的URL但不是图像。

我想将此图片设置为我在活动中的ImageView。到目前为止,这是我的代码:

        // Get the required stuff from the webpage
        Document document = null;
        try {
            document = Jsoup.connect(URL).get();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Element info = document.select("div.featurebox").first();
        // Caption on image
        docInfo = info.text();
        // URL of image
        imageURL = info.attr("data-url");

        // Retrieve the actual image
        Element featureImage = document.select("div.featurebox-image").first();
        // Unsure what to get here

应注意,图像不会以正常img-src方式存储。我正在研究的特定div类是:

<div class="featurebox-image" style="background:url(http://img.mangastream.com/cdn/feature/02.jpg) center center;">
                <div class="featurebox-caption">
                    <strong>History's Strongest Disciple Kenichi <em>544</em></strong> - Witch                    </div>
            </div>

所以我正在追踪该网址的实际图片。

我该怎么做?

由于

2 个答案:

答案 0 :(得分:1)

看看是否有效: -

String temp = featureImage.getAttribute("style");
String url = temp.substring(temp.indexOf("(")+1,temp.indexOf(")"));

答案 1 :(得分:1)

感谢Hardip Patel提供的开始。这是我做的:

  • 我使用了Hardips代码并将其更改为以下内容:

        Element featureImage = document.select("div.featurebox-image")
                .first();
        String temp = featureImage.getElementsByAttribute("style")
                .toString();
        // URL of image
        imageStrg = temp
                .substring(temp.indexOf("(") + 1, temp.indexOf(")"));
    
  • 之后,我们花了很少的时间来了解StackOverflow以了解如何设置它。我最初尝试使用setImageURI()方法使用URL设置它,但这是一个错误。有关原因,请参阅here。相反,我使用SoH的答案从URL创建位图:

    // Method to return a bitmap from an images URL
    private Bitmap getImageBitmap(String url) {
    Bitmap bm = null;
    try {
    
        // See what we are getting
        Log.i(TAG, "" + url);
    
        URL aURL = new URL(url);
        URLConnection conn = aURL.openConnection();
        conn.connect();
    
        InputStream is = conn.getInputStream();
        BufferedInputStream bis = new BufferedInputStream(is);
        bm = BitmapFactory.decodeStream(bis);
    
        bis.close();
        is.close();
    } catch (IOException e) {
        Log.e(TAG, "Error getting bitmap", e);
    }
    return bm;
    

    }

  • 之后我只需要设置之前的Bitmap并使用ASyncTask onPostExecute()方法更新图片视图:

    imageOne = getImageBitmap(imageStrg);
    
    @Override
    protected void onPostExecute(String result) {
        // Write the result (document title) to the textview
        super.onPostExecute(result);
    
        // Update the textview with results
        if (result == null) {
    
            txtVwDocTitleValue.setText("Nothing to report...");
        } else {
            txtVwDocTitleValue.setText(result);
            txtVwDocURLValue.setText(imageURL);
    
            // Set the views image
            imgVwManga1.setImageBitmap(imageOne);
        }
        // Destroy the progress bar
        stopProgressDialog();
    }
    

干杯!