使用 Java 从 Google Drive 获取列表文件 [关闭]

2024-04-05

我正在开发一个可以从 Google Drive 登录、下载、上传和显示列表文件的应用程序。

我发现了Java代码来自谷歌云端硬盘 SDK https://developers.google.com/drive/v2/reference/files/list但它运行得很慢而且不起作用。

我正在阅读solution https://stackoverflow.com/a/15636599/2212742但不知道在哪里更改范围

我的主要活动:

        // google
        static final int REQUEST_ACCOUNT_PICKER = 1;
        static final int REQUEST_AUTHORIZATION = 2;
        static final int CAPTURE_IMAGE = 3;
        private GoogleAccountCredential credential;
        private static Uri fileUri;
        private static Drive service;

        public void onLoginGoogle(View v) {
                credential = GoogleAccountCredential.usingOAuth2(this, DriveScopes.DRIVE);
                startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
        }

        public void onUploadGoogle(View v) {
                Thread t = new Thread(new Runnable() {
                        @Override
                        public void run() {
                                try {
                                        // File's binary content
                                        java.io.File fileContent = new java.io.File("/sdcard/a.jpg");
                                        FileContent mediaContent = new FileContent("image/jpeg", fileContent);

                                        // File's metadata.
                                        com.google.api.services.drive.model.File body = new com.google.api.services.drive.model.File();
                                        body.setTitle(fileContent.getName());
                                        body.setMimeType("image/jpeg");

                                        com.google.api.services.drive.model.File file = service.files().insert(body, mediaContent).execute();
                                        if (file != null) {
                                                showToast("Photo uploaded: " + file.getTitle());
                                                // startCameraIntent();
                                        }
                                } catch (UserRecoverableAuthIOException e) {
                                        startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }
                });
                t.start();
        }

        public void onDownloadGoogle(View v) {
                downloadFile();
        }

        private void downloadFile() {
                Thread thread = new Thread(new Runnable() {

                        @Override
                        public void run() {
                                try {
                                        com.google.api.services.drive.model.File file = service.files().get("0B-Iak7O9SfIpYk9zTjZvY2xreVU").execute();
                                        // FileList file = service.files().list().execute();
                                        // List<com.google.api.services.drive.model.File> fileList =
                                        // file.getItems();
                                        // com.google.api.services.drive.model.File fileItem =
                                        // fileList.get(0);
                                        // Log.d("FileID" , fileItem.getId());
                                        // Log.d("Count", "Retreived file list");
                                        if (file.getDownloadUrl() != null && file.getDownloadUrl().length() > 0) {
                                                HttpResponse resp = service.getRequestFactory().buildGetRequest(new GenericUrl(file.getDownloadUrl())).execute();
                                                InputStream inputStream = resp.getContent();
                                                // writeToFile(inputStream);
                                        }
                                } catch (IOException e) {
                                        Log.e("WriteToFile", e.toString());
                                        e.printStackTrace();
                                }
                        }
                });
                thread.start();
        }

        List<File> mGFile;

        public void onListGoogle(View v) {
                AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() {

                        @Override
                        protected String doInBackground(Void... arg0) {
                                // TODO Auto-generated method stub
                                try {
                                        mGFile = retrieveAllFiles();
                                        int i = 0;
                                } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                                return null;
                        }

                        protected void onPostExecute(String result) {
                                Log.d("Dolphin get glist", String.valueOf(mGFile.size()));
                        };
                };
                task.execute();
                Log.d("Dolphin counting", "aa");
        }

        private List<File> retrieveAllFiles() throws IOException {
                List<File> result = new ArrayList<File>();
                Files.List request = service.files().list();

                do {
                        try {
                                FileList files = request.execute();

                                result.addAll(files.getItems());
                                request.setPageToken(files.getNextPageToken());
                        } catch (IOException e) {
                                System.out.println("An error occurred: " + e);
                                request.setPageToken(null);
                        }
                } while (request.getPageToken() != null && request.getPageToken().length() > 0);

                return result;
        }

        private Drive getDriveService(GoogleAccountCredential credential) {
                return new Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential).build();
        }

@Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {

                switch (requestCode) {
                case REQUEST_ACCOUNT_PICKER:
                        if (resultCode == RESULT_OK && data != null && data.getExtras() != null) {
                                String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
                                if (accountName != null) {
                                        credential.setSelectedAccountName(accountName);
                                        service = getDriveService(credential);
                                }
                        }
                        break;
                case REQUEST_AUTHORIZATION:
                        if (resultCode == Activity.RESULT_OK) {
                                // saveFileToDrive();
                                Toast.makeText(this, "Login complete", Toast.LENGTH_SHORT);
                        } else {
                                startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
                        }
                        break;
                }
        }

日志猫:

"Application name is not set. Call Builder#setApplicationName."

如何从文件夹中获取文件列表?如果有一个可行的例子那就太棒了


这个对我有用:

private List<File> sendRequest(){
    List<File> result = new ArrayList<File>();

    try{
        Files.List request = service.files().list().setQ("trashed = false");

        do{
            try{
                FileList files = request.execute();

                result.addAll(files.getItems());
                request.setPageToken(files.getNextPageToken());
            }
            catch(IOException e){
                System.out.println("An error occurred: " + e);
                request.setPageToken(null);
            }
        }
        while(request.getPageToken() != null
                && request.getPageToken().length() > 0);

    }
    catch(IOException e1){
        e1.printStackTrace();
    }

    for(File file : result){
        Log.d(TAG, "file : " + file.getTitle());
    }
    return result;
}

如果您想要特定文件夹中的文件,您可以尝试以下请求:

Files.List request = service.files().list().setQ("'" + folderId + "' in parents and trashed = false");

正如你所说,它很慢,但我不知道如何做得更好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Java 从 Google Drive 获取列表文件 [关闭] 的相关文章

  • UiBinder 中的 gwt 按钮

    我需要创建一个按钮 所以它是一个带有图像的按钮 gwt with UiBinder 但我不确定如何进行 这是我的ui xml code
  • 全屏独占模式下的 AWT 框架在窗口弹出对话框中最小化

    我正在开发一个在全屏独占模式下使用 awt 框架的应用程序 一切正常 直到弹出窗口可见 这会抢走焦点 我的应用程序将被最小化 这是我的框架的初始化代码 if ApplicationConfig getInstance useFullscre
  • 如何检测屏幕何时关闭?

    是否可以检测屏幕何时关闭并捕获它 我想在 Android 的全局设置中将计时器设置为 15 秒 我正在尝试查找一些如何捕获唤醒锁定模式的信息 只需注册您的应用程序即可执行操作Intent ACTION SCREEN OFF https de
  • Hibernate HQL 查询:如何将集合设置为查询的命名参数?

    给定以下 HQL 查询 FROM Foo WHERE Id id AND Bar IN barList I set id使用查询对象的setInteger 方法 我想设置 barList用一个List对象 但查看 Hibernate 文档和
  • Apache POI 的 ProGuard 设置

    我正在构建一个使用 Apache POI 库的应用程序 当我调试应用程序 在不运行 Proguard 的情况下编译它 时 一切都运行良好 但是在导出 APK 后 当我运行应用程序并打开 Excel 文件时 出现以下异常 RuntimeExc
  • 使用 viewModel 从 ChildFragment 访问 ParentFragment 中的 ViewModel

    我正在尝试访问ParentViewModel for ParentFragment from ChildFragment using viewModels 这是我的代码 In ParentFragment class ParentFragm
  • 用dagger 2查看依赖注入

    我有一个自定义视图扩展TextView 我应该在哪里调用我的组件来注入视图 component inject customTextView 因此 我发现我需要在自定义视图的构造函数中添加注入 在所有视图中 或者使一个调用另一个 Exampl
  • 还有其他地方可以获得 google-services.json 吗?

    我尝试单击GET A CONFIGURATION FILE链接自the docs https developers google com identity sign in android start integrating get conf
  • 摆动刷新周期

    我试图了解何时使用重新验证 重绘 打包 令人惊讶的是 我没有找到详细的底层文档 请随意链接 到目前为止我已经明白这都是 RepaintManager 的责任 油漆 重新油漆指的是脏 干净的东西 pack validate revalidat
  • Handler、MessageQueue、Looper,它们都是运行在UI线程上的吗?

    我正在尝试解决线程问题 并且我知道我可能会使用Handler将消息 可运行对象发布到MessageQueue 这又被Looper并发送回Handler进行加工 如果我发帖到Handler在我的活动中 是Activity Handler Me
  • 平移、缩放或旋转的子视图消失

    我有一个ViewGroup我向其中添加子视图 如下所示 mViewGroup addView view new LayoutParams LayoutParams WRAP CONTENT LayoutParams WRAP CONTENT
  • 使用JPanel绘制直线并获取点坐标

    我现在完全不知所措 我没有太多用 Java 构建 GUI 我一直在阅读有关 swing 和 JPanel 的所有内容 我认为我想做的事情是可能的 我只是还没有弄清楚how 我正在尝试构建一个 GUI 您可以在其中在某个绘图区域内绘制直线 我
  • Spring @Configuration如何缓存对bean的引用

    使用基于 Java 的配置时 Spring 如何防止再次调用 bar 我想知道编译时注释处理或通过代理方法 Configuration public class AppConfig Bean public Foo foo return ne
  • 电子邮件发不出去,短信中的链接为 404

    我们刚刚完成将 Google AppInvites 集成到我们的应用程序中 我们注意到以下问题 电子邮件不会被发送 而发送的短信会带有一个链接 显示会出现 404 页面 仅当我设置 设置其他平台目标应用程序 对于 Android 和 iOS
  • 使用 colt java lib 时出现“矩阵太大”异常

    我正在使用 cern colt matrix lib 进行稀疏矩阵计算 但似乎我一直遇到此错误 线程 main 中的异常 java lang IllegalArgumentException 矩阵太大 我认为这是因为构造函数在 nrows
  • bean 中的 Spring JavaConfig 属性未设置?

    我正在考虑将 Spring JavaConfig 与一些属性文件一起使用 但 bean 中的属性未设置 bean 中的属性未设置 这是我的网络配置 Configuration EnableWebMvc PropertySource valu
  • 警告:无法加载 sqljdbc_auth.dll 原因:java.library.path 中没有 sqljdbc_auth

    我正在使用 Ubuntu 12 05 并尝试连接到 Windows Server 2012 来获取数据库 我的数据库名称是 jobs 电脑的IP地址是192 160 1 33 托管在1433 但是当我尝试连接时出现以下错误 WARNING
  • 了解 FTS3/FTS4:什么是虚拟表并从中搜索具有可搜索的非虚拟表?

    阅读 SQLite3 的 FTS3 FTS4 文档的第一部分后 我现在感到非常困惑 我感到困惑的原因是散布在网络上的示例 我相信它没有涵盖所有可能的用例 另一个原因是我目前所处的情况 话虽如此 我有一个名为 Note 的表 其中包含两个类型
  • Selenium Webdriver 中的 IF 语句

    我想知道是否有人可以帮助我解决我正在尝试解决的问题以及 Java 中 Webdriver 的 If 语句 当登录到我正在测试的应用程序时 可以在主页之前进入安全问题页面 如果是新用户等 我希望测试中的代码做的是 如果出现安全问题页面 请填写
  • 如何更改MultipartFile的originalFilename

    我在服务器端有一个 MultipartFile 文件 我想更改该文件的原始文件名 但该类仅支持 getOriginalFilename 谁能帮我这个 PS 上传的是图片文件 多谢 您可以使用 MockMultipartFile 类更改名称

随机推荐