Note that there are some explanatory texts on larger screens.

plurals
  1. PODownload images with AsyncTask
    primarykey
    data
    text
    <p>I'm not really sure what goes wrong with my code or structure. I wanted to use AsyncTask to download images and display out the progress bar at the mean time. But I tried out a few different way of doing it. It still failed and no idea what's wrong with it. My structure flow is</p> <p><strong>ContentID is a string array that stores the content ID of the Images.</strong></p> <p><strong>Primary Issue: It managed to download images from the url and store into the phone, but the downloaded images are all the same image. It should be different images, it's not what I expected.</strong></p> <p><em>Secondary Issue: The progress bar pop up while the application downloading images, but the progress bar did not update it's progress. It just remains 0% and dismissed after the download completed.</em></p> <p>I wanted to know what causes primary and secodary issue as i mentioned. Please leave a comment or answer if you might know what's wrong with my code. Any help will be appreciated. </p> <pre><code>if(isSyncSuccess){ SetConstant.IMAGE_EXIST = 1; pDialog = new ProgressDialog(GalleryScreen.this); pDialog.setMessage("Downloading file. Please wait..."); pDialog.setIndeterminate(false); pDialog.setProgress(0); pDialog.setMax(contentId.length); pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pDialog.setCancelable(true); if (contentId.length&gt;0){ Log.i(TAG, "contentid.length:" +contentId.length); for (int i=0;i&lt;contentId.length;i++){ if(helper.databaseChecking(useremail, contentId[i])){ contentdownload = i; SetConstant.CONTENT_ID = contentId[i]; String URL = SetConstant.URL_DOWNLOAD_CONTENT+contentId[i]; DownloadFile downloadFile = new DownloadFile(); downloadFile.execute(URL); } private class DownloadFile extends AsyncTask&lt;String, Integer, String&gt;{ @Override protected String doInBackground(String... sUrl){ Bitmap bm; InputStream in; try{ in = new java.net.URL(sUrl[0]).openStream(); bm = BitmapFactory.decodeStream(new PatchInputStream(in)); File storage = new File(Environment.getExternalStorageDirectory() + File.separator + "/Image/"); Log.i(TAG,"storage:" +storage); Log.i(TAG,"storage:" +storage.getAbsolutePath()); if(!storage.exists()){ storage.mkdirs(); } String FileName = "/"+SetConstant.CONTENT_ID+".jpg"; FileOutputStream fos = new FileOutputStream(storage + FileName); bm.compress(Bitmap.CompressFormat.JPEG, 85, fos); String filepath = storage + FileName; File filecheck = new File (filepath); long fileSize = filecheck.length(); fos.flush(); fos.close(); Log.i(TAG, "bm:" +bm); Log.i(TAG, "fos:" +fos); Log.i(TAG, "filesize:" +fileSize); Log.i(TAG, "filepath:" +filepath); } catch(IOException e1){ e1.printStackTrace(); } return null; } @Override protected void onPreExecute(){ super.onPreExecute(); pDialog.show(); } @Override protected void onProgressUpdate(Integer... progress){ super.onProgressUpdate(progress); pDialog.setProgress(progress[0]); } protected void onPostExecute(String result){ super.onPostExecute(result); pDialog.dismiss(); } } </code></pre> <p><strong>Edit</strong></p> <p>Now the application able to download images according and the progress bar is working as well! But I got another issue is how to return error message when the application failed to complete the download. Currently when the application failed to download it will crash. I believed that I should not run it inside the doInBackground side. But where else can I do the checking? Any idea how to return as an error message and request for the user to retry instead of crashing the application? </p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
 

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