Saving image from url using Picasso?

后端 未结 4 2030
庸人自扰
庸人自扰 2020-12-03 06:48

I\'m trying save an image using API Picasso. To do it I\'m trying use Target to save but I can\'t do this work.

How could I do this ?

Trying

相关标签:
4条回答
  • 2020-12-03 07:27

    Solved. now works fine!

    I did

    //save image
        public static void imageDownload(Context ctx, String url){
            Picasso.with(ctx)
                    .load("http://blog.concretesolutions.com.br/wp-content/uploads/2015/04/Android1.png")
                    .into(getTarget(url));
        }
    
        //target to save
        private static Target getTarget(final String url){
            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().getPath() + "/" + url);
                            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();
    
                }
    
                @Override
                public void onBitmapFailed(Drawable errorDrawable) {
    
                }
    
                @Override
                public void onPrepareLoad(Drawable placeHolderDrawable) {
    
                }
            };
            return target;
        }
    
    0 讨论(0)
  • 2020-12-03 07:31

    I can see 2 possible issues:

    1. trying to save to external storage without write permissions in your manifest
    2. try change the filename so its not the whole url, which could be your issue because of the characters in your url that arent valid as filename chars.
    0 讨论(0)
  • 2020-12-03 07:31

    I think you need to check whether you are actually requesting the permission. In Android the permissions are dynamic starting from the version 6.0. Either you must request it at run time or just downgrade your targetSdk version to 22.

    0 讨论(0)
  • 2020-12-03 07:34

    I Modified the solution to this, adding permissions and a button to load and save the Image,and PhotoLoader class remains the same !

    private static final String[] STORAGE_PERMISSIONS = { Manifest.permission.WRITE_EXTERNAL_STORAGE};
        ImageView imageView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            imageView = (ImageView) findViewById(R.id.imageView);
    
            verifyPermissions();
        }
        public void save(View view)
        {
            Picasso.with(this)
                    .load("https://www.w3schools.com/howto/img_fjords.jpg")
                    .into(new PhotoLoader("myImg.jpg" , imageView));
        }
    
        public void verifyPermissions()
        {
            // This will return the current Status
            int permissionExternalMemory = ActivityCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE);
    
            if(permissionExternalMemory != PackageManager.PERMISSION_GRANTED)
            {
                // If permission not granted then ask for permission real time.
                ActivityCompat.requestPermissions(MainActivity.this,STORAGE_PERMISSIONS,1);
            }
        }
    
    0 讨论(0)
提交回复
热议问题