Skip to content

Instantly share code, notes, and snippets.

@chaps
Created March 14, 2016 20:10
Show Gist options
  • Save chaps/fe81b8e169408c460366 to your computer and use it in GitHub Desktop.
Save chaps/fe81b8e169408c460366 to your computer and use it in GitHub Desktop.
Android: download and replace file for newer from url
package com.example.yeoman.downloadfile;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
public Button btn;
private File f;
private String nombreArchivo = "/asd.txt";
private String fileString = "http://thekillingloneliness.com/test.txt";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.clickButton);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickButton(v);
}
});
}
private class DownloadWebpageTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
try {
String response = downloadUrl(urls[0]);
return response;
} catch (IOException e) {
return e.toString();
}
}
@Override
protected void onPostExecute(String result) {
Log.d("DEBUG postexec", result);
Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show();
}
}
private String downloadUrl(String myurl) throws IOException {
InputStream is = null;
String result;
try {
URL url = new URL(myurl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
// Starts the query
conn.connect();
Log.d("DEBUG", String.valueOf(this.getFilesDir()));
File file = new File(this.getFilesDir(), nombreArchivo);
boolean exists= false;
//Flaggeamos si el archivo existe
if(file.exists()){
Log.d("DEBUG", "FILE EXISTST");
exists = true;
}
String lastModified = conn.getHeaderField("Last-Modified");
Log.d("DEBUG", "last modified " + lastModified);
SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz");
try{
is = conn.getInputStream();
if( exists == false){
Log.d("DEBUG", "NO EXISTE CREANDO..");
copyInputStreamToFile(is, file);
Log.d("DEBUG", "NUEVO ARCHIVO:");
printFile(file);
result = "El archivo local no existia y se creo";
}else{
Date d = format.parse(lastModified);
Log.d("DEBUG downloaded time",String.valueOf(d.getTime()));
int response = conn.getResponseCode();
Log.d("DEBUG local file", String.valueOf(file.lastModified()));
Log.d("DEBUG", "COMPARE CREATED TIMES.");
if( d.getTime() < file.lastModified() ){
Log.d("DEBUG", "DOWNLOADED MAS VIEJO QUE LOCAL");
Log.d("DEBUG", "contenidp LOCAL");
printFile(file);
result = "El archivo local es mas reciente y no se sustituto";
}else {
Log.d("DEBUG", "DOWNLOADED MAS RECIENTE QUE LOCAL");
Log.d("DEBUG", "contenidp LOCAL ANTES");
printFile(file);
copyInputStreamToFile(is, file);
Log.d("DEBUG", "contenidp LOCAL ßDESPUES");
printFile(file);
result = "El archivo local fue sustituido";
}
}
}catch (Exception e){
Log.d("DEBUG CATCH", e.toString());
return null;
}
} finally {
if (is != null) {
is.close();
}
}
return result;
}
private void printFile(File file) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file.getAbsolutePath()));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String line = null;
try {
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
private void copyInputStreamToFile( InputStream in, File file ) {
try {
OutputStream out = new FileOutputStream(file);
byte[] buf = new byte[1024];
int len;
while((len=in.read(buf))>0){
out.write(buf,0,len);
}
out.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private void actualizarCarta(String url){
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
// fetch data
new DownloadWebpageTask ().execute(url);
} else {
// display error
Toast.makeText(getApplicationContext(), "No hay conexion a internet", Toast.LENGTH_LONG).show();
}
}
public void clickButton(View view){
actualizarCarta(fileString);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment