我正在尝试使用Google Play游戏服务API为成就绘制图标。
然而,它正在默默地失败。
ImageManager.loadImage
获取图片,并使用OnImageLoadedListener
进行回调(com.google.android.gms.common.images.ImageManager
)。// Get URI [is valid, exists, is of type png, I checked]
Uri uri = getAchievementIconUri(id);
// Use ImageManager to get the icon image
ImageManager.create(context).
loadImage(new ImageManager.OnImageLoadedListener() {
@Override
public void onImageLoaded(Uri u, Drawable d, boolean r) {
/*
* This code is never reached, no call to onImageLoaded is made!
*/
}
}, uri);
答案 0 :(得分:5)
这可能是一个非常晚的答案,但它可能会帮助其他经历相同的人。来自最新的Google文档https://developers.google.com/android/reference/com/google/android/gms/common/images/ImageManager.html#public-methods
请注意,在回调完成之前,您应该保留对提供的侦听器的引用。因此,不鼓励使用匿名实现。
这可能会解释您遇到的行为,如在第一个提供的代码段中,未保留对Listener的引用。
答案 1 :(得分:0)
嗯,重要的是,我从来没有完全解决过这个问题。
似乎它偶尔会偶尔显示图标,只要感觉就好。
我实现了一种解决方法,可以加载图像的压缩缓存版本,稍后如果可以解决这个问题,可以将其替换为ImageManager提供的图像。
如果有人找到了正确的答案,那么我将删除此解决方法,但在此之前,它适用于任何有同样问题的人。
public Bitmap loadDefaultAchievementIcon(final String id) {
// Get drawable ID for achievement
// iconIdMap is a map of achievement ID strings against their drawable res IDs
int resID = iconIdMap.containsKey(id) ? iconIdMap.get(id) :
// Fallback/unknown icon
R.drawable.ic_action_achievements;
// Load and return bitmap
InputStream is = getResources().openRawResource(resID);
Bitmap bitmap = BitmapFactory.decodeStream(is);
return bitmap;
}