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

在Android上获取所有文件夹Google Drive API

陆运乾
2023-03-14
问题内容

我使用新的Google驱动器api,但无法从Google驱动器中获取所有文件夹,只能获取使用Google驱动器api创建的文件夹…有人知道为什么会这样吗?

这是我的代码:

@Override
    protected void onResume() {
        super.onResume();
        if (mGoogleApiClient == null) {
            // Create the API client and bind it to an instance variable.
            // We use this instance as the callback for connection and connection
            // failures.
            // Since no account name is passed, the user is prompted to choose.
            mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .addApi(Drive.API)
                    .addScope(Drive.SCOPE_FILE)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .build();
        }
        // Connect the client. Once connected, the camera is launched.
        mGoogleApiClient.connect();
    }


    /**
     * Handles resolution callbacks.
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode,
                                    Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE_RESOLUTION && resultCode == RESULT_OK) {
            mGoogleApiClient.connect();

        }
    }

    /**
     * Called when activity gets invisible. Connection to Drive service needs to
     * be disconnected as soon as an activity is invisible.
     */
    @Override
    protected void onPause() {
        if (mGoogleApiClient != null) {
            mGoogleApiClient.disconnect();
        }
        super.onPause();
    }

    /**
     * Called when {@code mGoogleApiClient} is connected.
     */
    @Override
    public void onConnected(Bundle connectionHint) {
        Log.i(TAG, "GoogleApiClient connected");

        rootFolder = Drive.DriveApi.getRootFolder(mGoogleApiClient);

       rootFolder.listChildren(getGoogleApiClient()).setResultCallback(pruebaChildren);

    }


    ResultCallback<DriveApi.MetadataBufferResult> pruebaChildren = new
            ResultCallback<DriveApi.MetadataBufferResult>() {
                @Override
                public void onResult(DriveApi.MetadataBufferResult metadataBufferResult) {
                    if (!metadataBufferResult.getStatus().isSuccess()) {
                        showMessage("Problem while retrieving files");
                        return;
                    }
                    Log.i(TAG,"got root folder");
                    MetadataBuffer buffer = metadataBufferResult.getMetadataBuffer();
                    Log.i(TAG,"Buffer count  " + buffer.getCount());
                    if(buffer.getCount() == 0){
                        createFolderApp();
                    }
                    else{
                        for(Metadata m : buffer){
                            Log.i(TAG,"Metadata name  " + m.getTitle() + "(" + (m.isFolder() ? "folder" : "file") + ")");
                            if (m.isFolder() && m.getTitle().equals(TAG)){
                                Log.i(TAG,"APP FOLDER FOUND");
                                Drive.DriveApi.getFolder(mGoogleApiClient, m.getDriveId())
                                        .listChildren(mGoogleApiClient)
                                        .setResultCallback(foreachAppAplication);
                            }
                        }
                    }
                    return;
                }
            };

现在,我想查看rootFolder驱动器中的所有文件夹,我尝试了requestSync(),但结果是相同的……请提供帮助!

另一个问题:如何设置AppFolder?我只看到getAppFolder,但如何设置?

谢谢


问题答案:

根据设计,GDAA仅支持FILE范围,即它将仅查找/列出由Android应用程序创建的文件夹/文件。

有两种解决方法:

  1. 使用GDAA 的 意图 之一,基本上是让用户选择文件/文件夹。这样,它将对您的应用程序可用。
  2. 使用其他API,即REST Api,它支持DRIVE范围,为您的应用程序提供完整的文件/文件夹集。

如果您想研究这两个API的行为,我在Github上放置了两个不同的演示(REST和GDAA
CRUD演示包装器)。

您问题的第二部分没有答案。您没有设置应用程序文件夹,只能获取它的DriveFolder ID。您可以使用它来创建/检索对象

  DriveFolder appFldr = Drive.DriveApi.getAppFolder(mGooleApiClient);
  appFldr.createFile(...);
  appFldr.createFolder(...);
  appFldr.listChildren(...);
  appFldr.queryChildren(...);

…并且不要忘记添加 SCOPE_APPFOLDER 范围

祝好运



 类似资料:
  • 问题内容: 我需要使用文件夹中文件的所有名称创建一个列表。 例如,如果我有: 我想将它们存储为 with 作为值。 用Java做到最好的方法是什么? PS:我在Mac OS X上 问题答案: 你可以这样做: 你只想获取JPEG文件还是所有文件?

  • 问题内容: 我使用以下代码删除所有文件: 它将删除false 文件夹所在的位置。 我想删除文件夹及其所有子文件。 我该如何修改? 问题答案: 最简单的方法是使用Apache Commons IO库中的FileUtils.deleteDirectory。 请记住,这还将删除包含目录。 在gradle文件中添加此行以使用Apache

  • 问题内容: 我需要一种从本地文件夹中获取所有图像的方法,以便在本地也可以运行演示文稿。由于这是不可能的,服务器将不会尝试从本地文件夹中获取图像。 我需要使用.js,因为它无法在本地PC上运行,因此无法使用.php(这样会更容易)。 说我需要从 学习中 获取所有图像 / 问题答案: 我认为您最好的选择是在Javascript中使用新的File API。是具有很多从文件系统读取文件的功能。 (代码从这

  • 本文向大家介绍从PHP文件夹中获取所有图像,包括了从PHP文件夹中获取所有图像的使用技巧和注意事项,需要的朋友参考一下 glob函数可用于从特定文件夹获取图像。以下是相同的示例代码- 指定图像文件夹的路径,并提取所有扩展名为.png的文件。它们在foreach循环的帮助下显示- 基于包含所有图像的文件夹,返回存在于文件夹内的每个图像的路径。

  • 问题内容: 比方说,我有一个文件夹,名为和里面我有,和。如何使用Java和读取文件夹中的所有文件(如果可能的话)? 问题答案: 类似于以下内容应该可以帮助您,请注意,为了简单起见,我使用apache commons FileUtils而不是弄乱缓冲区和流…

  • 问题内容: 如何在Linux下使用Python获取目录的所有者和组ID? 问题答案: 使用获得的UID和GID的文件。然后,使用和分别获取用户名和组名。