 <p>Here is my code which will first load the image from the cache if the cache for that file exists, then update the cache file. If it doesn't exist, then load it from the internet(url).</p> <pre><code>Picasso.with(getApplicationContext()).load(headerUserObject.getParseFile("profilePicture").getUrl()) .placeholder(R.color.placeholderblue).networkPolicy(NetworkPolicy.OFFLINE) // try to load the image from cache first .into(((ImageView) findViewById(R.id.profile_picture)), new Callback() { @Override public void onSuccess() { //cache file for this url exists, now update the cache for this url if(networkAvaialable()) // if internet is working update the cache file Picasso.with(getApplicationContext()).invalidate(headerUserObject.getParseFile("profilePicture").getUrl()); } @Override public void onError() { // if cache file does not exist load it from the internet Picasso.with(getApplicationContext()).load(headerUserObject.getParseFile("profilePicture").getUrl()) .placeholder(R.color.placeholderblue) .into(((ImageView) findViewById(R.id.profile_picture))); } }); </code></pre>