Android仅在调试时显示我的图像

时间:2014-10-09 18:32:30

标签: android picasso

我知道这个论坛已经满了#34; Android没有显示图像"问题,但它们似乎都没有与我所经历的一致。

当我使用调试器并逐步执行我的代码时,它工作正常并显示图像。但是当我不停止代码时,它根本不会更新图像,或者它会在以后更新它。

这看起来Android并没有使视图无效,但添加invalidate()也无济于事。有什么想法吗?

以下是代码:

    Picasso.with(getContext()).load(url).into(new Target() { // using Picasso to load the image

        @Override public void onPrepareLoad(Drawable placeHolderDrawable) {
        }

        @Override public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {

            screenSurface.setImageBitmap(bitmap); // trying to display it, screenSurface is the ImageView
            // I tried adding screenSurface.invalidate() here but it doesn't help

        }

        @Override public void onBitmapFailed(Drawable errorDrawable) {
        }

    });

因为它看起来这是Android的问题,而不是毕加索,因为Picasso似乎在UI线程上发出回调。否则,在调试过程中也不会显示图像。

4 个答案:

答案 0 :(得分:1)

你的目标正在收集垃圾。请参阅此答案以获得解释(搜索的第一个结果):https://stackoverflow.com/a/24602348

答案 1 :(得分:0)

我对毕加索并不熟悉,但这个装载机对于Volley的ImageLoader来说非常熟悉。

仔细检查,但我想Picasso.LoadedFrom param要么意味着它是从缓存加载的,要么是从服务器加载的。看看这里:Picasso.LoadedFrom docs

也许在您的代码中,您可以拥有以下内容:

switch(Picasso.LoadedFrom.valueOf(from)) {
    case NETWORK:
        screenSurface.setImageBitmap(bitmap);
        break;
    case DISK:
        //Do something
        break;
    case MEMORY:
        //Do something
        break;
}

或者在加载时可能只有一个简单的if(from network) {setBitmap} else {show loading image}类型的东西。

希望这有帮助!

答案 2 :(得分:0)

由于您的目标只是一个标准的图片视图,我建议使用基本的into(ImageView)方法:

Picasso.with(getContext()).load(url).into(screenSurface);

如果由于某种原因需要使用自定义目标,则文档建议将该界面添加到自定义视图,而不是创建裸露的Target类。

Reference

答案 3 :(得分:0)

我前段时间遇到了类似的问题,并指出某个目标是收集了垃圾,没有断点就没有触发回调,我不得不使用一个字段来阻止目标,一切都很顺利。所以,创建一个目标字段

public Target target = new Target(){...}

然后

Picasso.with(getContext()).load(url).into(target);