位图下载导致问题的众多图像

时间:2016-12-19 06:57:48

标签: android bitmap

我正在学习Android开发。我正在使用Hearthstone开发Hearthstone API应用程序以获得乐趣。

我的用户可以搜索特定的卡片,现在我希望实现一个按类型显示卡片的Card Displayer,并让用户向右或向左滑动以显示我JSONArray中的下一张卡片。我的API请求为我提供了一个JSONObject img属性,其中卡片图片为URL

因此,当用户滑动时,我正在执行以下操作:

// Swipe right -> number - 1 (Previous page) 
// Swipe left -> number + 1 (Next page)
public void displayCardNumber(int number) {
    APIRequests apiRequests = new APIRequests();

    try {
        // Gets the JSONObject at 'number' and retrieves its img URL.
        JSONObject card = (JSONObject) cardsArray.get(number);
        String currentImageURL = (String) card.get("img");

        // Here is where my problem is.
        Bitmap bitmap = apiRequests.getImageBitmap(currentImageURL);
        if (bitmap != null) {
            setNewImage(bitmap);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

}

apiRequest.getImageBitmap(URL)是我遇到问题的地方。

我必须下载图像才能显示它,但是当我下载多个图像时,不仅以下代码块不起作用,我还必须找到一种有效的方式来显示我的卡片(这可能需要后台下载) ?)。

// Returns the image's bitmap using the URL
protected Bitmap getImageBitmap(String currentImageURL) {
    try {
        Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(currentImageURL).getContent());
        return bitmap;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

为什么我不能下载超过1张图片?我的方式是Bitmap假的吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

我找到了解决方案,

为了加载我的图像并显示它,我现在使用一个名为Android Universal Image Loader的库,让我可以执行以下操作:

 // Load image, decode it to Bitmap and display Bitmap in ImageView
 ImageLoader imageLoader = ImageLoader.getInstance();
 ImageView i = (ImageView)view.findViewById(R.id.cardDisplay);

 imageLoader.displayImage(currentImageURL, i);

我在AsyncTask的{​​{1}}中检索了正确的网址,并使用图书馆的方法显示该网址。

答案 1 :(得分:0)

使用Glide https://github.com/bumptech/glide。这样会更快。

 Bitmap theBitmap = Glide.
    with(this).
    load(imgUrl). //image url as string
    asBitmap().
    into(100, 100). // Width and height
    get();

您也可以使用其他方式使用它:

         Glide.with(context).load(url) // image url
                .thumbnail(0.5f)
                .crossFade()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .placeholder(imgId) // If no image found the imgId is the default image id for the imageView
                .into(imageView); // imageView to show the image