Picasso

Android de resim işlemleri memory ve yönetim açısından dikkatle ele alınması gereken konulardan. Uzun zamandır takip ettiğim picasso çok kullanışlı ve çok kısa bir kod ile bir view içerisine resim yüklemenize yardım ediyor.
ör:

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

Minumum memory kullanımını hedefleyen bu kütüphane hakkında bilgiyi bu sayfadan edinebilirsiniz.
http://square.github.io/picasso/

Ancak benim anlatmak istediğim geçenlerde picasso ile bir resmi sdcard a download edebilirmiyim istediğim bir yere sorusuna da cevap veriyor olması beni çok sevindirdi.

Bunu yapmanın birçok yolu var aslında ve network işlemi yaptığınızdan bu işlemi bir thread içinde yada asynctask kullanarak yapmanız gerekiyor.

try
{   
  URL url = new URL("Enter the URL to be downloaded");
  HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
  urlConnection.setRequestMethod("GET");
  urlConnection.setDoOutput(true);                   
  urlConnection.connect();                  
  File SDCardRoot = Environment.getExternalStorageDirectory().getAbsoluteFile();
  String filename="downloadedFile.png";   
  Log.i("Local filename:",""+filename);
  File file = new File(SDCardRoot,filename);
  if(file.createNewFile())
  {
    file.createNewFile();
  }                 
  FileOutputStream fileOutput = new FileOutputStream(file);
  InputStream inputStream = urlConnection.getInputStream();
  int totalSize = urlConnection.getContentLength();
  int downloadedSize = 0;   
  byte[] buffer = new byte[1024];
  int bufferLength = 0;
  while ( (bufferLength = inputStream.read(buffer)) > 0 ) 
  {                 
    fileOutput.write(buffer, 0, bufferLength);                  
    downloadedSize += bufferLength;                 
    Log.i("Progress:","downloadedSize:"+downloadedSize+"totalSize:"+ totalSize) ;
  }             
  fileOutput.close();
  if(downloadedSize==totalSize) filepath=file.getPath();    
} 
catch (MalformedURLException e) 
{
  e.printStackTrace();
} 
catch (IOException e)
{
  filepath=null;
  e.printStackTrace();
}
Log.i("filepath:"," "+filepath) ;
return filepath;



Ancak daha kolay bir şekilde picasso ile yapmak için target oluşturmanız yeterli

public Target targetLoginBg = 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()
                        + "/your_folder/login_bg.jpg");
            try {
               file.createNewFile();
               FileOutputStream ostream = new FileOutputStream(file);
               bitmap.compress(Bitmap.CompressFormat.JPEG,100,ostream);
               ostream.close();
            }
            catch (Exception e) {
               e.printStackTrace();
            }
         }
      }).start();
   }

   @Override
   public void onBitmapFailed(Drawable errorDrawable) {}

   @Override
   public void onPrepareLoad(Drawable placeHolderDrawable) {}
};

daha sonra download u başlatmak için bu kodu çağıryorsunuz ,
login_bg_url_val içinde download etmek istediğiniz resmin url si var.

Picasso.with(SplashActivty.this).load(login_bg_url_val).into(targetLoginBg);