当前位置: 首页 > 面试题库 >

未触发上传进度监听器(Google驱动器API)

孟杰
2023-03-14
问题内容

我想按使用Google Drive API上传文件的百分比显示进度。

我的想法之前已经成功上传了文件,但是看不到上传进度。

我已经看到并添加了此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)和uploader.setChunkSize(MediaHttpUploader.MINIMUM_CHUNK_SIZE);或必须是的倍数的任何值MediaHttpUploader.MINIMUM_CHUNK_SIZE,否则将导致错误。



 类似资料:
  • 问题内容: 我做了一个自定义的Hibernate Event监听器,扩展了org.hibernate.event.PreInsertEventListener。自定义侦听器会覆盖onPreInsert方法并设置“联系人”实体的字段,然后再使用DAO将其保存在数据库中。 问题是,在侦听器为其提供值之前该字段为null,并且默认的hibernate事件侦听器在我的自定义侦听器之前自动触发。当他们检查d

  • 我不熟悉google drive api..我正在从我的服务器上传文件到google drive。 在我的 gmail 帐户中,我有 > 创建服务帐户,下载密钥并上传到服务器。 提供对驱动Api和SDK Api的访问 添加了一个与google通信的控制器: e/Client/contrib/Google_DriveService.php'); 现在输出如下: …………… 现在的主要问题是,通过这个

  • 我尝试的是下面的,但不是工作 从谷歌REST链接,它显示的例子如下,如何运行这个?

  • 我正在尝试Google Drive API V3。 拥有一些共享驱动器文件夹的访问权限,并且是所有这些资源的管理员,我想获取一个通过查询筛选的特定文件夹。 出于任何原因,当我尝试按照留档建议插入查询时,它会响应一个错误,这个错误不是很描述性,也不利于调试: 此外,如果我不带条件地执行查询,则响应会成功,并显示整个共享驱动器: 有什么帮助吗? 谢谢

  • 问题内容: 我有一个带有许多不同复选框和文本字段的JPanel,我有一个已禁用的按钮,并且在设置特定配置时需要将其启用。我需要的是整个JPanel上的侦听器,以在发生任何更改时查找事件。我相信我需要一个动作监听器,但找不到任何东西可以将动作监听器与JPanel桥接 我认为我可以将代码复制和粘贴很多次到面板中的每个侦听器中,但这对我来说似乎是不好的编码习惯。 问题答案: 首先在他的@Sage提意见一