“An error occured while executing doInBackground()”

150 Views Asked by At

i'm using the below code to get the file length and using which i display progress bar till i download the total file but i get an error from firebase crash report like below

java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:304)

  @Override
  protected String doInBackground(String...Url) {
   try {
    URL url = new URL(Url[0]);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
     HttpURLConnection connection = (HttpURLConnection) url.openConnection();
     connection.setRequestMethod("HEAD");
     connection.connect();
     // Detect the file lenghth
     fileLength = connection.getContentLength();
    } else {
     URLConnection connection = url.openConnection();
     connection.connect();
     // Detect the file lenghth
     fileLength = connection.getContentLength();
    }
    /*
    HttpURLConnection connection = (HttpURLConnection)url.openConnection();
    connection.setRequestMethod("HEAD");
    connection.connect();

    int fileLength = connection.getContentLength();*/

    // Locate storage location
    //  String filepath = Environment.getExternalStorageDirectory().getPath();
    String filepath = getFilesDirectory(getApplicationContext()).getPath();
    //   File fo = getFilesDirectory(getApplicationContext());
    // Download the file
    InputStream input = new BufferedInputStream(url.openStream());

    // Save the downloaded file
    if (lang_slector == 0) {
     // input stream to read file - with 8k buffer
     File folder = new File(filepath, "/offlinedata/");
     folder.mkdir();
     File pdfFile = new File(folder, englishpdffilename);
     try {
      pdfFile.createNewFile();
     } catch (IOException e) {
      e.printStackTrace();
     }
     OutputStream output = new FileOutputStream(filepath + "/offlinedata/" +
      pdffilename);
     byte data[] = new byte[1024];
     long total = 0;
     int count;
     while ((count = input.read(data)) != -1) {
      total += count;
      // Publish the progress
      publishProgress((int)(total * 100 / fileLength));

      output.write(data, 0, count);
     }
     // Close connection
     output.flush();
     output.close();
     input.close();
    } else if (lang_slector == 1) {
     // input stream to read file - with 8k buffer
     File folder = new File(filepath, "/offlinedata/");
     folder.mkdir();
     File pdfFile = new File(folder, englishpdffilename);
     try {
      pdfFile.createNewFile();
     } catch (IOException e) {
      e.printStackTrace();
     }
     OutputStream output = new FileOutputStream(filepath + "/offlinedata/" +
      englishpdffilename);
     byte data[] = new byte[1024];
     long total = 0;
     int count;
     while ((count = input.read(data)) != -1) {
      total += count;
      // Publish the progress
      publishProgress((int)(total * 100 / fileLength));

      output.write(data, 0, count);
     }

     // Close connection
     output.flush();
     output.close();
     input.close();
    }

   } catch (Exception e) {
    // Error Log
    Log.e("Error", e.getMessage());
    e.printStackTrace();
   }
   return null;
  }
0

There are 0 best solutions below