【问题标题】:Picasso wont load images anymore after updating to .get()更新到 .get() 后,毕加索将不再加载图像
【发布时间】:2020-01-08 00:08:43
【问题描述】:

在我迁移到新版本的毕加索之前,我的应用程序运行良好,所以 android studio 告诉我应该将 .with 方法更改为 .get() 所以我更改了它,现在它不会加载图像,并且不会不要给我任何错误,这是我的代码:

Picasso.get().load(image).error(R.drawable.placeholder).placeholder(R.drawable.placeholder).centerCrop().resize(720,720).into(this.image_view_wallpaper_image);

        public static void imageDownload(Context ctx, String url,String name){
            Picasso.get()
                    .load(url)
                    .into(getTarget(url,name,ctx));
        }
        //target to save
        private static Target getTarget(final String url, final String name, final Context ctx){
            Target target = new Target(){

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

                        @Override
                        public void run() {

                            File file = new File(Environment.getExternalStorageDirectory().toString() + ctx.getResources().getString(R.string.DownloadFolder) + name);
                            try {
                                file.createNewFile();
                                FileOutputStream ostream = new FileOutputStream(file);
                                bitmap.compress(Bitmap.CompressFormat.JPEG, 80, ostream);
                                ostream.flush();
                                ostream.close();
                            } catch (IOException e) {
                                Log.e("IOException", e.getLocalizedMessage());
                            }
                        }
                    }).start();
                    Log.v("ok","onBitmapLoaded");


                }
    public void loadBitmap(String url) {

            if (loadtarget == null) loadtarget = new Target() {
                @Override
                public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                    tempBmp=bitmap;
                    new WallpaperOperation().execute("");
                }

                @Override
                public void onBitmapFailed(Exception e, Drawable errorDrawable) {

                }



                @Override
                public void onPrepareLoad(Drawable placeHolderDrawable) {

                }
            };
            Picasso.get().load(url).into(loadtarget);
        }

在更新之前它是这样的,并且运行良好:

Picasso.with(getApplicationContext()).load(image).error(R.drawable.placeholder).placeholder(R.drawable.placeholder).centerCrop().resize(720,720).into(this.image_view_wallpaper_image);

显然这不是完整的代码,我只是把我改变的部分,我没有得到任何错误,毕加索是最新版本但它不会显示任何东西,我也迁移到了 android x。

【问题讨论】:

  • 你能不能只检查这部分Picasso.get().load(image).error(R.drawable.placeholder).placeholder(R.drawable.placeholder).centerCrop().resize(720,720).into(this.image_view_wallpaper_image); 并报告它是否有效。我刚刚检查了您的第一行,它确实从互联网加载了图像。
  • @Farid 我检查了这部分,但它不会加载任何不在我的服务器或互联网上的东西,我也输入了直接地址但没有任何反应。
  • 嗯,很有趣。升级库时,您是否更改了任何部分?另外,要检查问题是否出在当前项目上,您可以创建一个新的简单项目并在那里测试 Picasso。如果该项目有效,那么我们可以轻松发现问题,我猜
  • @Farid 这可能是因为我使用 http 而不是 https 吗?有关系吗?
  • 如果你不想替换你所有的 url 然后添加这个依赖 implementation("com.squareup.okhttp3:okhttp:4.1.1")gradle 然后毕加索可以从 http 加载图像

标签: android imageview picasso


【解决方案1】:

根据 cmets,问题是 http 端点问题。你有两个选择:

选项 1. 在传递给毕加索之前,将您的 url 的 http 替换为 https

    String imageUrl = "http://www.myurl.com/images/earth.png";
    imageUrl = imageUrl.replace("http","https");
    Picasso.get().url(imageUrl).....

选项 2。 使用支持 Http 连接的 http 客户端,例如 OkHttp。要使用它,请将依赖项添加到 gradle.build

implementation("com.squareup.okhttp3:okhttp:4.1.1")

【讨论】:

    【解决方案2】:

    使用 Glide 库代替 Picasso,因为 Glide 比 Picasso 和其他一些功能更快。

    dependencies {
    implementation 'com.github.bumptech.glide:glide:3.8.0'
    

    }

    用法

    Glide.with(context)
                        .load(url)
                        .listener(new RequestListener<String, GlideDrawable>() {
                            @Override
                            public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                                holder.mProgressBar.setVisibility(View.GONE);
                                holder.mImgProduct.setImageResource(R.drawable.ic_cart);
                                return false;
                            }
    
                            @Override
                            public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                                holder.mProgressBar.setVisibility(View.GONE);
                                return false;
                            }
                        })
                        .diskCacheStrategy(DiskCacheStrategy.SOURCE)
                        .into(holder.mImgProduct);
    

    【讨论】:

    • OP 不是在寻求替代方案,而是在寻求解决方案。最好考虑
    猜你喜欢
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多