上传进度监听器没有被解雇(谷歌驱动API) [英] Upload progress listener not fired (Google drive API)
问题描述
我想用谷歌驱动的API来显示通过上传文件的百分比进度。
我menthod已经成功上载前的文件,但它无法看到上传进度。
我已经看到了,并添加<一href="http://stackoverflow.com/questions/13580109/check-progress-for-upload-download-google-drive-api-for-android-or-java">this FileUploadProgressListener 但 mediaHttpUploader.getProgress()
只显示0.0(进度开始)和1.0(时进度完成)。我不能让进步%的时间。
如何使它工作?
下面是我上传code:
公共无效UploadFile(最终DFile uploadFile){
如果(!isLoggedIn()){
OnUploadGoogleChecked(FALSE,未登录);
返回;
}
AsyncTask的&LT;虚空龙,串&GT;任务=新的AsyncTask&LT;虚空龙,串&GT;(){
的java.io.File fileContent;
FileContent mediaContent;
com.google.api.services.drive.model.File体;
com.google.api.services.drive.model.File文件;
私人ProgressDialog mDialog;
长mFileLen;
@覆盖
在preExecute保护无效(){
// TODO自动生成方法存根
super.on preExecute();
mDialog =新ProgressDialog(行为);
mDialog.setMax(100);
mDialog.setMessage(上传);
mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mDialog.setProgress(0);
mDialog.setButton(取消,新OnClickListener(){
@覆盖
公共无效的onClick(DialogInterface为arg0,INT ARG1){
// TODO自动生成方法存根
}
});
mDialog.show();
}
类FileUploadProgressListener实现MediaHttpUploaderProgressListener {
@覆盖
公共无效progressChanged(MediaHttpUploader上传)抛出IOException异常{
Log.d(海豚得到百分比,将String.valueOf(uploader.getProgress()));
开关(uploader.getUploadState()){
案例INITIATION_STARTED:
的System.out.println(初始启动);
打破;
案例INITIATION_COMPLETE:
的System.out.println(启动完成);
打破;
案例MEDIA_IN_PROGRESS:
的System.out.println(正在上传);
的System.out.println(上传百分比:+ uploader.getProgress());
打破;
案例MEDIA_COMPLETE:
的System.out.println(上传完成!);
打破;
案例NOT_STARTED:
的System.out.println(上传未启动!);
打破;
}
}
}
@覆盖
保护字符串doInBackground(虚空......为arg0){
尝试 {
java.io.File的UPLOAD_FILE =新的java.io.File(uploadFile.getNameAndDir());
//文件的元数据。
fileContent =新的java.io.File(uploadFile.getNameAndDir());
mFileLen = fileContent.length();
InputStreamContent mediaContent2 =新InputStreamContent(图像/ JPEG,新的BufferedInputStream(新的FileInputStream(UPLOAD_FILE)));
mediaContent2.setLength(UPLOAD_FILE.length());
身体=新com.google.api.services.drive.model.File();
body.setTitle(fileContent.getName());
body.setMimeType(为image / jpeg);
字符串parentId的= NULL;
body.setParents(Arrays.asList(新ParentReference()SETID(uploadFile.getFileHostFolderId())));
。Drive.Files.Insert MINSERT = service.files()插入(身体,mediaContent2);
MediaHttpUploader上传= mInsert.getMediaHttpUploader();
uploader.setDirectUploadEnabled(真正的);
uploader.setProgressListener(新FileUploadProgressListener());
文件= mInsert.execute();
如果(文件!= NULL){
}
}赶上(UserRecoverableAuthIOException E){
Log.d(海豚出现错误,无法登录+ E);
}赶上(IOException异常E){
e.printStackTrace();
}
返回null;
}
保护无效onPostExecute(字符串结果){
mDialog.dismiss();
OnUploadGoogleChecked(TRUE,上传完成);
};
};
task.execute();
}
要取得进步,必须使用 uploader.setDirectUploadEnabled(假);
,而不是(真
)和 uploader.setChunkSize(MediaHttpUploader.MINIMUM_CHUNK_SIZE);
或必须 MediaHttpUploader.MINIMUM_CHUNK_SIZE
,否则会导致错误。
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();
}
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.
这篇关于上传进度监听器没有被解雇(谷歌驱动API)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!