Created
March 14, 2016 20:10
-
-
Save chaps/fe81b8e169408c460366 to your computer and use it in GitHub Desktop.
Android: download and replace file for newer from url
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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