我在使用适用于 Android 的 Google Drive API 时遇到了一个令人发指的错误。具体来说,在向用户呈现“从 Google Drive 打开文件”UI 时,我使用以下代码查询文件夹中的文件:
String query = "'" + folderId + "' in parents and trashed = false";
Files.List request = service.files().list().setQ(query);
FileList files = request.execute();
java.util.List<File> items = files.getItems(); // Returns null!
当我直接从 Eclipse 运行此代码时(即使用调试证书签名),没有问题。但是,当我使用我们的发布证书构建和运行签名的 APK 时,对 files.getItems() 的调用返回 null。
奇怪的是,虽然 getItems() 返回 null,但肯定有从 Drive 服务器返回的数据,因为调用 files.toString() 显示了一个混乱的 Json,其中我已经确定了我的一些文件的文件名,所以我没有t 认为问题是身份验证问题。
此外,在查询字符串中使用不同的文件夹 ID 似乎对 toString() 返回的 Json 没有任何影响。基于 logcat 中激进的 GC 活动,看起来服务器可能正在返回我驱动器中的所有文件,特别是考虑到 getItems() 返回 null 很奇怪。
请注意,使用调试证书签名时,代码工作得非常好,因为我可以在我的应用程序中完美地浏览我的 Google Drive。