Android gms ImageManager永远不会加载图像

时间:2014-09-16 16:42:03

标签: android io google-play-services google-play-games

我正在尝试使用Google Play游戏服务API为成就绘制图标。
然而,它正在默默地失败。

方法/问题:

  • 成功检索图像的URI,存在且有效。
  • 我使用ImageManager.loadImage获取图片,并使用OnImageLoadedListener进行回调(com.google.android.gms.common.images.ImageManager)。
  • OnImageLoadedListener 的方法 onImageLoaded 永远不会被调用。
  • 没有错误,没有证据,只是完全被忽略,我甚至等了10分钟以防万一。

代码:

// 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);

2 个答案:

答案 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;
}