毕加索:在5.1.1中图像无法加载,但4.2.1中可以加载。

3

我正在使用Picasso库在我的应用程序中加载图像。它在Android 5.1.1以下版本中运行良好,但在5.1.1上不行。
以下是一个示例URL,无法加载:
http://sexocomcafe1-teste.tempsite.ws/imagensUsuario13/avata/Atração%20PerigosaRJ_44690132.jpg
这个URL在Andriod 4.2.1和其他版本中完美加载,但在我的5.1.1设备上无法加载。
这是我尝试过的代码

//Singleton instance of picasso
 getPicassoInstance(){
 if (picasso == null) {
            picasso = new Picasso.Builder(PreferenceHelper.getContext()).executor(Executors.newSingleThreadExecutor())
                    .build();
        }
        return picasso;
}

getPicassoInstance().load(url).placeholder(R.drawable.default_image)
                        .into(myImageView);

Also following code by using the Target
Target targetAppLogo = new Target() {

                @Override
                public void onPrepareLoad(Drawable arg0) {
                    Logger.error("on prepare load avatar");
                }

                @SuppressLint("NewApi")
                @Override
                public void onBitmapLoaded(Bitmap bitmap, LoadedFrom arg1) {
                    Logger.error("Save aavatar success ");
                }

                @Override
                public void onBitmapFailed(Drawable arg0) {
                    Logger.error("Bitmap loading failed ");
                }
            };

            getPicassoInstance().load(url).into(targetAppLogo);

上面的代码在4.2.1中成功下载了位图,但在5.1.1中位图加载失败。 对于代码出了什么问题我一无所知。 感谢任何帮助。

除了Logger.error()之外,LogCat中是否有任何消息?我记得Picasso会记录一些自己的消息。 - CommonsWare
没有任何日志被打印。 - Sanket Salvi
3个回答

0

使用 Html.fromHtml(String) 方法。这应该可以解决您的问题。

在加载图片之前添加以下行:

url = Html.fromHtml(url).toString();

所以它看起来像这样:

url = Html.fromHtml(url).toString();

getPicassoInstance().load(url).placeholder(R.drawable.default_image)
                        .into(myImageView);

以下是我的示例代码,用于加载您提供的URL图像:
    String url = Html.fromHtml("http://sexocomcafe1-teste.tempsite.ws/imagensUsuario13/avata/Atra%C3%A7%C3%A3o%20PerigosaRJ_44690132.jpg").toString();
    Picasso.with(this)
   .load(url)
   .into(img);

0

Aquery也可用于图像加载,下载aquery jar并将其导入到您的项目中,然后尝试这种方式

 public class MainActivity extends Activity {

    private ImageView img;
    private AQuery aq;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        aq = new AQuery(this);
        img=(ImageView)findViewById(R.id.simpleLoadImg);
        aq.id(R.id.simpleLoadImg).image("http://sexocomcafe1-teste.tempsite.ws/imagensUsuario13/avata/Atra%C3%A7%C3%A3o%20PerigosaRJ_44690132.jpg",false,false);

    }


}

如果它能正常工作,为什么你一定要使用 Picasso 呢? - Aditya Vyas-Lakhan

0
如果您无法找到解决方案,请检查您的Android代码中的以下内容。
 final boolean[] isImageLoad = {false};
 String finalUrl = url;
 new Handler().postDelayed(new Runnable() {
      @Override
      public void run() {
           while (!isImageLoad[0]) {
               Picasso.get().load(finalUrl).into(new Target() {
                   @Override
                   public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                        Log.d(TAG, "store image url onBitmapLoaded ");
                        heatMap.setBackground(new BitmapDrawable(getActivity().getResources(), bitmap));
                        isImageLoad[0] = true;
                        }

                        @Override
                        public void onBitmapFailed(Exception e, Drawable errorDrawable) {
                            Log.d(TAG, "store image url " + e.getMessage());

                    }

                    @Override
                    public void onPrepareLoad(Drawable placeHolderDrawable) {
                            Log.d(TAG, "store image url onPrepareLoad ");
                            isImageLoad[0] = false;
                        }
                    });

                }
            }
        }, 100);

编程愉快!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接