Picasso 目标 onBitmapLoaded 未在 for 循环中调用

2024-03-31

下面的代码片段用于将文件加载到位图中并将该文件保存在内部目录中(即 PNG 或 JPG 格式)

final List<Target> targets = new ArrayList<Target>();
final List<Target> targetsNormal = new ArrayList<Target>();
for (int j = 0; j < defaultTileImage.size(); j++) {

    final String slangTiles = defaultTileImage.get(j).getPairName() +
            ApplicationConstants.SLANG_TILES;
    final String normalTiles = defaultTileImage.get(j).getPairName() +
            ApplicationConstants.NORMAL_TILES;

    final int k = j;

    Target target = new Target() {
        @Override
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
            Log.i("Targets", "Loaded: " + k);
            targets.remove(this);
            saveIntoBitmap(bitmap, slangTiles);
        }
        @Override
        public void onBitmapFailed(Drawable errorDrawable) {
            targets.remove(this);
        }
        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) {
            Log.i("Targets", "Preparing: " + k);
        }
    };


    Target targetNormal = new Target() {
        @Override
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
            Log.i("TargetsNormal", "Loaded: " + k);
            targetsNormal.remove(this);
            saveIntoBitmapSlang(bitmap, normalTiles);
        }
        @Override
        public void onBitmapFailed(Drawable errorDrawable) {
            targetsNormal.remove(this);
        }
        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) {
            Log.i("TargetsNormal", "Preparing: " + k);
        }
    };
    targetsNormal.add(targetNormal);
    Picasso.with(MainActivity.this)
            .load(defaultTileImage.get(j).getNormalTileImg()) // Start loading the current target
            .resize(100, 100)
            .into(targetNormal);

    targets.add(target);
    Picasso.with(MainActivity.this)
            .load(defaultTileImage.get(j).getSlangTileImg()) // Start loading the current target
            .resize(100, 100)
            .into(target);
}

也参观了这个link https://stackoverflow.com/a/33520908/1339473并按照该指南实施,使 Target 成为强有力的参考。但不幸的是很多时候位图加载时没有得到任何回调。

我非常感谢您帮助解决问题m


确保targets and targetsNormal是全局变量而不是局部变量。

如果它们是局部变量,那么一旦离开该方法,它们就会被垃圾回收。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Picasso 目标 onBitmapLoaded 未在 for 循环中调用 的相关文章

随机推荐