ImageLoadTask is working

This commit is contained in:
Pierre 2017-11-11 11:11:27 +01:00
parent 08686391dc
commit 4d8faf38a5

View File

@ -1,13 +1,19 @@
package org.communiquons.android.comunic.client.data; package org.communiquons.android.comunic.client.data;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.support.v4.content.ContextCompat; import android.support.v4.content.ContextCompat;
import android.util.Log; import android.util.Log;
import android.widget.ImageView; import android.widget.ImageView;
import java.io.File; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
@ -48,6 +54,11 @@ public class ImageLoadTask extends AsyncTask<Void, Void, Void> {
*/ */
private File img_file = null; private File img_file = null;
/**
* Bitmap object
*/
private Bitmap bitmap = null;
/** /**
* Class constructor * Class constructor
* *
@ -66,11 +77,11 @@ public class ImageLoadTask extends AsyncTask<Void, Void, Void> {
* Background task * Background task
*/ */
@Override @Override
protected Void doInBackground(Void... param){ protected Void doInBackground(Void... param) {
//Determine the file name for the view //Determine the file name for the view
String filename = get_file_name(url); String filename = get_file_name(url);
if(filename == null){ if (filename == null) {
Log.e("ImageLoadTask", "Couldn't generate file storage name !"); Log.e("ImageLoadTask", "Couldn't generate file storage name !");
return null; //An error occured return null; //An error occured
} }
@ -79,14 +90,65 @@ public class ImageLoadTask extends AsyncTask<Void, Void, Void> {
//Try to open the file //Try to open the file
img_file = new File(mContext.getCacheDir(), full_filename); img_file = new File(mContext.getCacheDir(), full_filename);
//Check if file exists or not
if (!img_file.exists())
//Download it
download_image();
//Check if there is still no file
if(!img_file.exists())
return null;
//Try to read file
try {
FileInputStream is = new FileInputStream(img_file);
bitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (FileNotFoundException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
//Check for errors //Check for errors
if(img_file == null){ if(bitmap == null){
Log.e("ImageLoadTask", "Couldn't open image file !");
//Delete cached file
img_file.delete();
Log.e("ImageLoadTask", "File is corrupted, will have to be downloaded again !");
}
return null; return null;
} }
/**
* On post execution operations
*/
@Override
protected void onPostExecute(Void aVoid) {
if(bitmap != null)
view.setImageBitmap(bitmap);
}
/**
* Download the file and store it in the cache
*
* @return True in case of success
*/
private boolean download_image(){
//Create cache parent directory
if(!create_parent_directory())
return false;
try { try {
//Open the file for writing
if(!img_file.createNewFile())
return false;
OutputStream os = new FileOutputStream(img_file, false);
//Open the connection //Open the connection
URL urlObj = new URL(url); URL urlObj = new URL(url);
HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection(); HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection();
@ -100,20 +162,19 @@ public class ImageLoadTask extends AsyncTask<Void, Void, Void> {
//Get input stream //Get input stream
InputStream is = conn.getInputStream(); InputStream is = conn.getInputStream();
//Open the file for writing //Transfer bytes
OutputStream os = new FileOutputStream(img_file, false);
//Transfert bytes
Utilities.InputToOutputStream(is, os); Utilities.InputToOutputStream(is, os);
os.close(); os.close();
is.close(); is.close();
conn.disconnect();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return false;
} }
return null; return true;
} }
@ -127,4 +188,26 @@ public class ImageLoadTask extends AsyncTask<Void, Void, Void> {
return Utilities.sha1(url); return Utilities.sha1(url);
} }
/**
* Create cache images files parent directory if it does not exist
*
* @return True in case of success
*/
private boolean create_parent_directory(){
File parent = new File(mContext.getCacheDir(), IMAGE_CACHE_DIRECTORY);
//Check if parent directory already exists
if(parent.exists())
return true;
//Try to create directories
boolean success = parent.mkdirs();
//Return error if required
if(!success)
Log.e("ImageLoadTask", "Couldn't create cache parent directory !");
return success;
}
} }