【问题标题】:Upload progress listener not fired (Google drive API)上传进度侦听器未触发(Google 驱动器 API)
【发布时间】:2013-08-01 06:25:19
【问题描述】:

我想通过使用 Google Drive 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);而不是“真”,而 uploader.setChunkSize(MediaHttpUploader.MINIMUM_CHUNK_SIZE);或任何必须是“MediaHttpUploader.MINIMUM_CHUNK_SIZE”的乘积的值,否则会导致错误。
  • @tcboy88 没错,只需添加 setDirectUploadEnabled 和 setChunkSize 就可以了!!
  • @Dolphin .. 你能提供完整的代码吗,因为我在导入时遇到错误,并且一些依赖项没有完全解决。请帮忙。
  • @SimpleCoder 这个帖子太老了,我不再保留代码了..
  • @Dolphin.. 好的没问题。我会继续寻找直到找到。 :P

标签: java android progressdialog google-drive-api


【解决方案1】:

要获得进度,您必须使用uploader.setDirectUploadEnabled(false);(而不是true)和uploader.setChunkSize(MediaHttpUploader.MINIMUM_CHUNK_SIZE); 或任何必须是MediaHttpUploader.MINIMUM_CHUNK_SIZE 的乘积的值,否则会导致错误。

【讨论】:

  • 这为我节省了大量时间
猜你喜欢
  • 1970-01-01
  • 2022-06-10
  • 2015-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多