Google 드라이브 API를 사용하여 업로드 파일의 비율로 진행률을 표시하려고합니다.진행률 수신기가 실행되지 않음 (Google 드라이브 API)
내 menthod가 이전에 파일 업로드에 성공했지만 업로드 진행 상황을 볼 수 없습니다.
this FileUploadProgressListener을 보았지만 mediaHttpUploader.getProgress()
은 0.0 (진행 시작)과 1.0 (진행 완료) 만 표시했습니다. 나는 시간의 경과의 퍼센트를 얻을 수 없다.
제작 방법 작동 여부 그렇지 않으면이 오류가 발생합니다,
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();
}
응답 코드 대신 답글로 답장을 보내므로 코드를 테스트하지 않았습니다. 진행률을 얻으려면 uploader.setDirectUploadEnabled (false);를 사용해야합니다. "true"대신 및 업 로더 .setChunkSize (MediaHttpUploader.MINIMUM_CHUNK_SIZE); 또는 "MediaHttpUploader.MINIMUM_CHUNK_SIZE"의 배수 여야하는 값이면 오류가 발생합니다. – tcboy88
@ tcboy88 맞아요. 그냥 setDirectUploadEnabled와 setChunkSize를 추가하면 효과가 있습니다 !! – Dolphin
@ Dolphin .. 가져 오기 오류가 발생하고 일부 종속성이 완전히 해결되지 않았으므로 전체 코드를 제공해주십시오. 도와주세요. – SimpleCoder