1
public class ProgressRequestBody extends RequestBody {


    private File mFile;
    private String mPath;
    private UploadCallbacks mListener;

    private static final int DEFAULT_BUFFER_SIZE = 2048;

    public interface UploadCallbacks {
        void onProgressUpdate(int percentage);
        void onError();
        void onFinish();
    }

    public ProgressRequestBody(File file,UploadCallbacks listener) {
        mFile = file;
        mListener = listener;
    }

    @Override
    public MediaType contentType() {
        // i want to upload only images
        return MediaType.parse("image/*");
    }

    @Override
    public long contentLength() throws IOException {
        return mFile.length();
    }

    @Override
    public void writeTo(BufferedSink sink) throws IOException {

        Source source = null;
        try {
            source = Okio.source(mFile);
            long total = 0;
            long read;

            while ((read = source.read(sink.buffer(), DEFAULT_BUFFER_SIZE)) != -1) {

                total += read;
                sink.flush();
                mListener.onProgressUpdate((int)(100 * total / mFile.length()));

            }
        } finally {
            Util.closeQuietly(source);
        }
    }

In the above code progress bar appears twice when we upload a single file. Means internally writing the file first and uploading happening second time. So it's showing two progress bars. How can we avoid that first progress bar shows?

Filnor
  • 1,290
  • 2
  • 23
  • 28
saneesh
  • 137
  • 11

0 Answers0