Note that there are some explanatory texts on larger screens.

plurals
  1. POOnly download file if updated?
    text
    copied!<p>I'm using the code below to download a file. However I only want to download if the remote file is newer then the locally stored (if there is one). Can I somehow use the if-modefied-since http header? How can I update my code to archive my goal?</p> <pre><code>private class DownloadFile extends AsyncTask&lt;String, Integer, String&gt; { @Override protected void onPreExecute() { super.onPreExecute(); mProgressDialog.show(); } @Override protected String doInBackground(String... sUrl) { try { URL url = new URL(sUrl[0]); URLConnection connection = url.openConnection(); connection.connect(); // this will be useful so that you can show a typical 0-100% progress bar int fileLength = connection.getContentLength(); // download the file InputStream input = new BufferedInputStream(url.openStream()); OutputStream output = new FileOutputStream(path); byte data[] = new byte[1024]; long total = 0; int count; while ((count = input.read(data)) != -1) { total += count; publishProgress((int) (total * 100 / fileLength)); output.write(data, 0, count); } output.flush(); output.close(); input.close(); } catch(MalformedURLException e) { e.printStackTrace(); } catch(FileNotFoundException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); mProgressDialog.dismiss(); // TODO: here file is downloaded and we are ready to process it. } @Override protected void onProgressUpdate(Integer... progress) { super.onProgressUpdate(progress); mProgressDialog.setProgress(progress[0]); } } </code></pre> <p>I've updated my code to look like this...</p> <pre><code> @Override protected String doInBackground(String... sUrl) { long lastModified = new File(path).lastModified(); try { URL url = new URL(sUrl[0]); URLConnection connection = url.openConnection(); connection.connect(); if(lastModified != 0) { connection.setIfModifiedSince(lastModified); } // this will be useful so that you can show a typical 0-100% progress bar int fileLength = connection.getContentLength(); ... </code></pre> <p>Any good ideas regarding how to actually test this? The while loop shouldn't run if the file isn't newer, right?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload