Android : how to downloading image and pdf in single function in android

on Friday, July 25, 2014


In My application I am download image and pdf files by checking the extension of the file if it is pdf means calling one function and if it is image means it's calling another function.


Now i want to call the same function because coding part is same here i want to change the application type whether it is a pdf or image.I am displaying data by parsing json url.


can any one please help me how to call the single function in that i want to download pdf /jpg/png.


MediaCoverage



public class MediaCoverage extends ListActivity {

private ProgressDialog pDialog;

// URL to get contacts JSON
//private static String url = "http://agilerise.com/school/viveroplayschool/json/json_schedule.php";
private static String url = "http://indianpoliticalleadersmap.com/android/prithvirajchavan/json/json_schedule.php";

// JSON Node names
private static final String TAG_SCHEDULES = "schedule";
private static final String TAG_ID = "id";
private static final String TAG_TITLE = "title";
private static final String TAG_CONTENT = "content";
private static final String TAG_IMAGE = "image";
private static final String TAG_PLACE = "place";
private static final String TAG_DATETIME = "date_time";

// contacts JSONArray
JSONArray schedules = null;

// Hashmap for ListView
ArrayList<HashMap<String, String>> schedule_list;

DownloadFileFromURL task;
DownloadFileFromURL1 task1;
URLConnection conn = null;
URLConnection conn1 = null;
InputStream input = null;
private ProgressDialog pDialogD;
String imagename;
File file;
public static final int progress_bar_types = 0;
//String image1;

String fileName;
String fileNameWithoutExtn;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.news_events_list_view);

schedule_list = new ArrayList<HashMap<String, String>>();

ListView lv = getListView();


// Listview on item click listener
lv.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

// getting values from selected ListItem
String image = ((TextView) view.findViewById(R.id.image)).getText().toString();


//String[] str1 = image.split("/");
//imagename = str1[5].trim();
String fileName = image.substring( image.lastIndexOf('/')+1, image.length() );
String fileNameWithoutExtn = image.substring(image.lastIndexOf('.')+1);
//String ext = FilenameUtils.getExtension("/path/to/file/foo.txt");

String image1="jpg";
String image2="pdf";



if(fileNameWithoutExtn.equalsIgnoreCase(image1)){

task = (DownloadFileFromURL) new DownloadFileFromURL().execute(image);

}
else if(fileNameWithoutExtn.equalsIgnoreCase(image2)){
task1 = (DownloadFileFromURL1) new DownloadFileFromURL1().execute(image);
//Toast.makeText(getBaseContext(), "no Png images", Toast.LENGTH_LONG).show();
}


}

});

// Calling async task to get json
new GetSchedule().execute();
}

/**
* Async task class to get json by making HTTP call
* */
private class GetSchedule extends AsyncTask<Void, Void, Void> {

@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(MediaCoverage.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();

}

@Override
protected Void doInBackground(Void... arg0) {
// Creating service handler class instance
ServiceHandler sh = new ServiceHandler();

// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);

Log.d("Response: ", "> " + jsonStr);

if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);

// Getting JSON Array node
schedules = jsonObj.getJSONArray(TAG_SCHEDULES);

// looping through All Schdules
for (int i = 0; i < schedules.length(); i++) {
JSONObject c = schedules.getJSONObject(i);

String id = c.getString(TAG_ID);
String title = c.getString(TAG_TITLE);
String content = c.getString(TAG_CONTENT);
String image = c.getString(TAG_IMAGE);
String place = c.getString(TAG_PLACE);
String datetime = c.getString(TAG_DATETIME);

// Phone node is JSON Object

// tmp hashmap for Schedule
HashMap<String, String> schedule_file = new HashMap<String, String>();

// adding each child node to HashMap key => value
schedule_file.put(TAG_ID, id);
schedule_file.put(TAG_TITLE, title);
schedule_file.put(TAG_CONTENT, content);
schedule_file.put(TAG_IMAGE, image);
schedule_file.put(TAG_PLACE, place);
schedule_file.put(TAG_DATETIME, datetime);

// adding schedule list
schedule_list.add(schedule_file);
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}

return null;
}

@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
/**
* Updating parsed JSON data into ListView
* */

ListAdapter adapter = new SimpleAdapter(
MediaCoverage.this, schedule_list,
R.layout.news_events_list_item,
new String[] { TAG_TITLE, TAG_CONTENT, TAG_IMAGE, TAG_PLACE, TAG_DATETIME },
new int[] { R.id.title,R.id.content, R.id.image, R.id.place, R.id.datetime });

setListAdapter(adapter);
}
}

@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case progress_bar_types:
pDialogD = new ProgressDialog(this);
pDialogD.setMessage("Downloading file. Please wait...");
pDialogD.setIndeterminate(false);
pDialogD.setMax(100);
pDialogD.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//pDialogD.setCancelable(true);
pDialogD.show();
return pDialogD;
default:
return null;
}
}

public static File getSaveFilePath(String fileName) {
File dir = new File(Environment.getExternalStorageDirectory(), "sapthagiri");
dir.mkdirs();
File file = new File(dir, fileName);
return file;
}
class DownloadFileFromURL extends AsyncTask<String, String, String> {

@SuppressWarnings("deprecation")
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(progress_bar_types);
}

@Override
protected String doInBackground(String... f_url) {
int count;

try {
URL url = new URL(f_url[0]);
conn = (HttpURLConnection) url.openConnection();
conn.connect();

int lenghtOfFile = conn.getContentLength();

input = new BufferedInputStream(url.openStream(), 8192);

File SDCardRoot = Environment.getExternalStorageDirectory();
// String SDCardRoot = Environment.getExternalStorageDirectory().getAbsolutePath();

file = new File(SDCardRoot, "application_form.jpg");


FileOutputStream output = new FileOutputStream(file);

byte data[] = new byte[1024];

long total = 0;

while ((count = input.read(data)) != -1) {
total += count;

publishProgress(""+(int)((total*100)/lenghtOfFile));

output.write(data, 0, count);
}
output.flush();
output.close();
input.close();

} catch (Exception e) {
Log.e("Error: ", e.getMessage());
}

return null;
}
protected void onProgressUpdate(String... progress) {
// setting progress percentage
pDialogD.setProgress(Integer.parseInt(progress[0]));
}
@SuppressWarnings("deprecation")
protected void onPostExecute(String URL) {
dismissDialog(progress_bar_types);
final String imagePath = Environment.getExternalStorageDirectory().toString()+ "/application_form.jpg";
//String imagePath2 = Environment.getExternalStorageDirectory().toString() + "/school_calender.pdf";
Toast.makeText(getApplicationContext(), "Download Completed :"+imagePath, Toast.LENGTH_LONG).show();
//sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
MediaScannerConnection.scanFile(MediaCoverage.this, new String[] { file.toString() }, null, new MediaScannerConnection.OnScanCompletedListener() {

public void onScanCompleted(String path, Uri uri) {

Log.i("ExternalStorage", "Scanned " + imagePath + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});

Uri path = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setDataAndType(path, "image/*");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

//application/pdf

}
}
class DownloadFileFromURL1 extends AsyncTask<String, String, String> {

@SuppressWarnings("deprecation")
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(progress_bar_types);
}

@Override
protected String doInBackground(String... f_url) {
int count;

try {
URL url = new URL(f_url[0]);
conn1 = (HttpURLConnection) url.openConnection();
conn1.connect();

int lenghtOfFile = conn1.getContentLength();

input = new BufferedInputStream(url.openStream(), 8192);

File SDCardRoot = Environment.getExternalStorageDirectory();
// String SDCardRoot = Environment.getExternalStorageDirectory().getAbsolutePath();

file = new File(SDCardRoot, "application_form.pdf");


FileOutputStream output = new FileOutputStream(file);

byte data[] = new byte[1024];

long total = 0;

while ((count = input.read(data)) != -1) {
total += count;

publishProgress(""+(int)((total*100)/lenghtOfFile));

output.write(data, 0, count);
}
output.flush();
output.close();
input.close();

} catch (Exception e) {
Log.e("Error: ", e.getMessage());
}

return null;
}
protected void onProgressUpdate(String... progress) {
// setting progress percentage
pDialogD.setProgress(Integer.parseInt(progress[0]));
}
@SuppressWarnings("deprecation")
protected void onPostExecute(String URL) {
dismissDialog(progress_bar_types);
final String imagePath = Environment.getExternalStorageDirectory().toString()+ "/application_form.pdf";
//String imagePath2 = Environment.getExternalStorageDirectory().toString() + "/school_calender.pdf";
Toast.makeText(getApplicationContext(), "Download Completed :"+imagePath, Toast.LENGTH_LONG).show();
//sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
MediaScannerConnection.scanFile(MediaCoverage.this, new String[] { file.toString() }, null, new MediaScannerConnection.OnScanCompletedListener() {

public void onScanCompleted(String path, Uri uri) {

Log.i("ExternalStorage", "Scanned " + imagePath + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});

Uri path = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setDataAndType(path, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

//application/pdf

}
}

public void onBackPressed() {
if (conn != null)
{
task.cancel(true);

}
else if(conn1 !=null)
{
task1.cancel(true);
}
finish();
}

}

0 comments:

Post a Comment