我正在学习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
假的吗?
谢谢。
答案 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