上传进度监听器没有被解雇(谷歌驱动API) [英] Upload progress listener not fired (Google drive API)

查看:144
本文介绍了上传进度监听器没有被解雇(谷歌驱动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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆