title: how to save my image loaded from firebase storage through picasso in cache of my app
body: <p>I am new to android development I followed some tutorials  for loading image through Picasso , but I have 1 problem like I when ever I load image from firebase storage through Picasso the image is appears but when I close my app and open app the image is gone and I need to upload and retrieve it again. my friend suggested me to store the image in cache , so please help me in doing this. Here is my code I implemented to load image from firebase storage.</p>
  
  <pre><code>import android.app.ProgressDialog;
  import android.content.Intent;
  import android.graphics.Bitmap;
  import android.net.Uri;
  import android.provider.MediaStore;
  import android.support.annotation.NonNull;
  import android.support.v7.app.AppCompatActivity;
  import android.os.Bundle;
  import android.view.View;
  import android.widget.Button;
  import android.widget.ImageView;
  import android.widget.Toast;
  
  import com.google.android.gms.tasks.OnFailureListener;
  import com.google.android.gms.tasks.OnSuccessListener;
  import com.google.firebase.storage.FirebaseStorage;
  import com.google.firebase.storage.OnProgressListener;
  import com.google.firebase.storage.StorageReference;
  import com.google.firebase.storage.UploadTask;
  import com.squareup.picasso.Picasso;
  
  import java.io.IOException;
  
  import static android.R.attr.bitmap;
  
  public class ProfilePhotoUI extends AppCompatActivity implements View.OnClickListener /*  implementing click listener */ {
      //a constant to track the file chooser intent
      private static final int PICK_IMAGE_REQUEST = 234;
  
      //Buttons
      private Button buttonChoose;
      private Button buttonUpload;
  
      //ImageView
      private ImageView imageView;
  
      //a Uri object to store file path
      private Uri filePath;
  
      //firebase storage reference
      private StorageReference storageReference;
  
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_profile_photo_ui);
  
          //getting views from layout
          buttonChoose = (Button) findViewById(R.id.buttonChoose);
          buttonUpload = (Button) findViewById(R.id.buttonUpload);
  
          imageView = (ImageView) findViewById(R.id.imageView);
  
          //attaching listener
          buttonChoose.setOnClickListener(this);
          buttonUpload.setOnClickListener(this);
  
          //getting firebase storage reference
          storageReference = FirebaseStorage.getInstance().getReference();
      }
  
      //method to show file chooser
      private void showFileChooser() {
          Intent intent = new Intent();
          intent.setType("image/*");
          intent.setAction(Intent.ACTION_GET_CONTENT);
          startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
      }
  
      //handling the image chooser activity result
      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
          if (requestCode == PICK_IMAGE_REQUEST &amp;&amp; resultCode == RESULT_OK &amp;&amp; data != null &amp;&amp; data.getData() != null) {
              filePath = data.getData();
              try {
                  Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                  imageView.setImageBitmap(bitmap);
  
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      }
  
      //this method will upload the file
      private void uploadFile() {
          //if there is a file to upload
          if (filePath != null) {
              //displaying a progress dialog while upload is going on
              final ProgressDialog progressDialog = new ProgressDialog(this);
              progressDialog.setTitle("Uploading");
              progressDialog.show();
  
              StorageReference riversRef = storageReference.child("images/pic.jpg");
              riversRef.putFile(filePath)
                      .addOnSuccessListener(new OnSuccessListener&lt;UploadTask.TaskSnapshot&gt;() {
                          @Override
                          public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                              //if the upload is successfull
                              //hiding the progress dialog
                              progressDialog.dismiss();
                              Uri downloadUri = taskSnapshot.getDownloadUrl();
  
                              Picasso.with(ProfilePhotoUI.this).load(downloadUri).transform(new CircleTransform()).into(imageView);
  
  
                              //and displaying a success toast
                              Toast.makeText(getApplicationContext(), "File Uploaded ", Toast.LENGTH_LONG).show();
  
                          }
                      })
                      .addOnFailureListener(new OnFailureListener() {
                          @Override
                          public void onFailure(@NonNull Exception exception) {
                              //if the upload is not successfull
                              //hiding the progress dialog
                              progressDialog.dismiss();
  
                              //and displaying error message
                              Toast.makeText(getApplicationContext(), exception.getMessage(), Toast.LENGTH_LONG).show();
                          }
                      })
                      .addOnProgressListener(new OnProgressListener&lt;UploadTask.TaskSnapshot&gt;() {
                          @Override
                          public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                              //calculating progress percentage
                              double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
  
                              //displaying percentage in progress dialog
                              progressDialog.setMessage("Uploaded " + ((int) progress) + "%...");
                          }
                      });
          }
          //if there is not any file
          else {
              //you can display an error toast
          }
      }
  
      @Override
      public void onClick(View view) {
          //if the clicked button is choose
          if (view == buttonChoose) {
              showFileChooser();
          }
          //if the clicked button is upload
          else if (view == buttonUpload) {
              uploadFile();
          }
      }
  }
  </code></pre>