title: How to Show Progress Bar while uploading with percentage
body: <p>I am uploading video and photo.and its working fine .now i want to show progress bar while uploading data with percentage.i took reference from android hive and its implemented in <strong>httpclient</strong> and i modified it accordingly <strong>httpurlconnection</strong>.Any help will appreciated .thank you.</p>
  
  <p>This is my main Activity where async task is performing. </p>
  
  <pre><code>protected void onProgressUpdate(Integer... progress) {
          // Making progress bar visible
          progressBar.setVisibility(View.VISIBLE);
  
          // updating progress bar value
          progressBar.setProgress(progress[0]);
  
          // updating percentage value
          txtPercentage.setText(String.valueOf(progress[0]) + "%");
      }
  
      @Override
      protected String doInBackground(Void... params) {
          return uploadFile();
      }
  
      @SuppressWarnings("deprecation")
      private String uploadFile() {
          String responseString = null;
              String charset = "UTF-8";
              String requestURL = "YOUR_URL";
  
              VideoUpload multipart = null;
              try {
                  multipart = new VideoUpload(Config.FILE_UPLOAD_URL, charset);
              } catch (IOException e) {
                  e.printStackTrace();
              }
  
          {
              //========================================================
              AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
                      new AndroidMultiPartEntity.ProgressListener() {
  
                          @Override
                          public void transferred(long num) {
                              publishProgress((int) ((num / (float) totalSize) * 100));
                          }
                      });
              //========================================================
              multipart.addFormField("website", "www.androidhive.info");
              multipart.addFormField("email", "abc@gmail.com");
              try {
                  multipart.addFilePart("image", new File(filePath));
              } catch (IOException e) {
                  e.printStackTrace();
              }
  
              try {
                  List&lt;String&gt; response = multipart.finish(); // response from server.
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
  
          return responseString;
      }
  
      @Override
      protected void onPostExecute(String result) {
          Log.e(TAG, "Response from server: " + result);
  
          // showing the server response in an alert dialog
          showAlert(result);
  
          super.onPostExecute(result);
      }
  
  }
  </code></pre>
  
  <p>this is my uploding class for httpurlconnections and its working .</p>
  
  <pre><code>public VideoUpload(String requestURL, String charset)
          throws IOException {
      this.charset = charset;
  
      // creates a unique boundary based on time stamp
      boundary = "===" + System.currentTimeMillis() + "===";
  
      URL url = new URL(requestURL);
      httpConn = (HttpURLConnection) url.openConnection();
      httpConn.setUseCaches(false);
      httpConn.setDoOutput(true); // indicates POST method
      httpConn.setDoInput(true);
      httpConn.setRequestProperty("Content-Type",
              "multipart/form-data; boundary=" + boundary);
      httpConn.setRequestProperty("User-Agent", "CodeJava Agent");
      httpConn.setRequestProperty("Test", "Bonjour");
      outputStream = httpConn.getOutputStream();
      writer = new PrintWriter(new OutputStreamWriter(outputStream, charset),
              true);
  }
  
  /**
   * Adds a form field to the request
   *
   * @param name  field name
   * @param value field value
   */
  public void addFormField(String name, String value) {
      writer.append("--" + boundary).append(LINE_FEED);
      writer.append("Content-Disposition: form-data; name=\"" + name + "\"")
              .append(LINE_FEED);
      writer.append("Content-Type: text/plain; charset=" + charset).append(
              LINE_FEED);
      writer.append(LINE_FEED);
      writer.append(value).append(LINE_FEED);
      writer.flush();
  }
  
  /**
   * Adds a upload file section to the request
   *
   * @param fieldName  name attribute in &lt;input type="file" name="..." /&gt;
   * @param uploadFile a File to be uploaded
   * @throws IOException
   */
  public void addFilePart(String fieldName, File uploadFile)
          throws IOException {
      String fileName = uploadFile.getName();
      writer.append("--" + boundary).append(LINE_FEED);
      writer.append(
              "Content-Disposition: form-data; name=\"" + fieldName
                      + "\"; filename=\"" + fileName + "\"")
              .append(LINE_FEED);
      writer.append(
              "Content-Type: "
                      + URLConnection.guessContentTypeFromName(fileName))
              .append(LINE_FEED);
      writer.append("Content-Transfer-Encoding: binary").append(LINE_FEED);
      writer.append(LINE_FEED);
      writer.flush();
  
      FileInputStream inputStream = new FileInputStream(uploadFile);
      byte[] buffer = new byte[4096];
      int bytesRead = -1;
      while ((bytesRead = inputStream.read(buffer)) != -1) {
          outputStream.write(buffer, 0, bytesRead);
      }
      outputStream.flush();
      inputStream.close();
  
      writer.append(LINE_FEED);
      writer.flush();
  }
  
  /**
   * Adds a header field to the request.
   *
   * @param name  - name of the header field
   * @param value - value of the header field
   */
  public void addHeaderField(String name, String value) {
      writer.append(name + ": " + value).append(LINE_FEED);
      writer.flush();
  }
  
  /**
   * Completes the request and receives response from the server.
   *
   * @return a list of Strings as response in case the server returned
   * status OK, otherwise an exception is thrown.
   * @throws IOException
   */
  public List&lt;String&gt; finish() throws IOException {
      List&lt;String&gt; response = new ArrayList&lt;String&gt;();
  
      writer.append(LINE_FEED).flush();
      writer.append("--" + boundary + "--").append(LINE_FEED);
      writer.close();
  
      // checks server's status code first
      int status = httpConn.getResponseCode();
      if (status == HttpURLConnection.HTTP_OK) {
          BufferedReader reader = new BufferedReader(new InputStreamReader(
                  httpConn.getInputStream()));
          String line = null;
          while ((line = reader.readLine()) != null) {
              response.add(line);
          }
          reader.close();
          httpConn.disconnect();
      } else {
          throw new IOException("Server returned non-OK status: " + status);
      }
  
      return response;
  }
  </code></pre>
  
  <p>here i took progress bar class from androidhive but i don't know how to use it </p>
  
  <pre><code>public class AndroidMultiPartEntity extends MultipartEntity
  
   {
  
  private final ProgressListener listener;
  
  public AndroidMultiPartEntity(final ProgressListener listener) {
      super();
      this.listener = listener;
  }
  
  public AndroidMultiPartEntity(final HttpMultipartMode mode,
          final ProgressListener listener) {
      super(mode);
      this.listener = listener;
  }
  
  public AndroidMultiPartEntity(HttpMultipartMode mode, final String boundary,
          final Charset charset, final ProgressListener listener) {
      super(mode, boundary, charset);
      this.listener = listener;
  }
  
  @Override
  public void writeTo(final OutputStream outstream) throws IOException {
      super.writeTo(new CountingOutputStream(outstream, this.listener));
  }
  
  public static interface ProgressListener {
      void transferred(long num);
  }
  
  public static class CountingOutputStream extends FilterOutputStream {
  
      private final ProgressListener listener;
      private long transferred;
  
      public CountingOutputStream(final OutputStream out,
              final ProgressListener listener) {
          super(out);
          this.listener = listener;
          this.transferred = 0;
      }
  
      public void write(byte[] b, int off, int len) throws IOException {
          out.write(b, off, len);
          this.transferred += len;
          this.listener.transferred(this.transferred);
      }
  
      public void write(int b) throws IOException {
          out.write(b);
          this.transferred++;
          this.listener.transferred(this.transferred);
      }
  }
  }
  </code></pre>