Upload progress listener not fired (Google drive API)
android, google-drive-api, java, progressdialog
Solution
To get progress, you must use `uploader.setDirectUploadEnabled(false);` (instead of `true`) and `uploader.setChunkSize(MediaHttpUploader.MINIMUM_CHUNK_SIZE);` or any value which must be the multiply of `MediaHttpUploader.MINIMUM_CHUNK_SIZE`, else it will cause error.
Problem
I want to show progress by percent of an uploading file using Google drive API. My menthod has successful upload a file before but It can't see upload progress. I've seen and added this FileUploadProgressListener but `mediaHttpUploader.getProgress()` show only 0.0 (start of progress) and 1.0 (when progress finished). I can't get percent of progress in time. How to make It work? Here is my Upload code: ``` public void UploadFile(final DFile uploadFile) { if (!isLoggedIn()) { OnUploadGoogleChecked(FALSE, "Not logged in"); return; } AsyncTask<Void, Long, String> task = new AsyncTask<Void, Long, String>() { java.io.File fileContent; FileContent mediaContent; com.google.api.services.drive.model.File body; com.google.api.services.drive.model.File file; private ProgressDialog mDialog; long mFileLen; @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); mDialog = new ProgressDialog(act); mDialog.setMax(100); mDialog.setMessage("Uploading "); mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); mDialog.setProgress(0); mDialog.setButton("Cancel", new OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub } }); mDialog.show(); } class FileUploadProgressListener implements MediaHttpUploaderProgressListener { @Override public void progressChanged(MediaHttpUploader uploader) throws IOException { Log.d("Dolphin got percent", String.valueOf(uploader.getProgress())); switch (uploader.getUploadState()) { case INITIATION_STARTED: System.out.println("Initiation Started"); break; case INITIATION_COMPLETE: System.out.println("Initiation Completed"); break; case MEDIA_IN_PROGRESS: System.out.println("Upload in progress"); System.out.println("Upload percentage: " + uploader.getProgress()); break; case MEDIA_COMPLETE: System.out.println("Upload Completed!"); break; case NOT_STARTED: System.out.println("Upload Not Started!"); break; } } } @Override protected String doInBackground(Void... arg0) { try { java.io.File UPLOAD_FILE = new java.io.File(uploadFile.getNameAndDir()); // File's metadata. fileContent = new java.io.File(uploadFile.getNameAndDir()); mFileLen = fileContent.length(); InputStreamContent mediaContent2 = new InputStreamContent("image/jpeg", new BufferedInputStream(new FileInputStream(UPLOAD_FILE))); mediaContent2.setLength(UPLOAD_FILE.length()); body = new com.google.api.services.drive.model.File(); body.setTitle(fileContent.getName()); body.setMimeType("image/jpeg"); String parentId = null; body.setParents(Arrays.asList(new ParentReference().setId(uploadFile.getFileHostFolderId()))); Drive.Files.Insert mInsert = service.files().insert(body, mediaContent2); MediaHttpUploader uploader = mInsert.getMediaHttpUploader(); uploader.setDirectUploadEnabled(true); uploader.setProgressListener(new FileUploadProgressListener()); file = mInsert.execute(); if (file != null) { } } catch (UserRecoverableAuthIOException e) { Log.d("Dolphin got error", "not login " + e); } catch (IOException e) { e.printStackTrace(); } return null; } protected void onPostExecute(String result) { mDialog.dismiss(); OnUploadGoogleChecked(TRUE, "Upload complete"); }; }; task.execute(); } ```