“createFromResource()”去了哪里?

时间:2014-02-15 16:23:39

标签: android google-drive-api google-play-services

我已更新到新版Google Play Services 4.2(库版本15)。突然之间,对DriveId.createFromResourceId(“....”)的调用尚未解决。

DriveId sFolderId = DriveId.createFromResourceId("0B2EE......N3J6RU0"); 

我知道我可以使用 DriveId encodeToString()/ decodeFromString()代替,但是:

  1. ResourceId直接对应于Google云端硬盘中文件的http。
  2. 即使文件被操作,似乎也是持久的
  3. documentationdemo code都广泛使用该方法。此外,镜像方法 getResourceId()仍然存在。
    不仅仅是一个问题,还要求 Google云端硬盘 / 澄清一下Google Play Svcs 人。

2 个答案:

答案 0 :(得分:8)

我测试了Burcu的答案,不幸的是它没有用。或者也许我错误地表达了这个问题。我会尝试重新说出来(我找到了正确答案)。

DriveId有两种不同的字符串类型ID表示形式(文件和文件夹)。

1/ DriveId.encodeToString(), resulting in something like:
"DriveId:CAESHDBCMW1RVVcyYUZKZmRhakIzMDBVbXMYjAUgssy8yYFRTTNKRU55"
2/ and DriveId.getResourceId(), resulting in shorter:
"UW2aFJfdajB3M3JENy00Ums0B1mQ"

在4.1中,有两种方法可以将这些方法转回DriveId

1/ DriveId.decodeFromString(DriveId.encodeToString());
2/ DriveId.createFromResourceId(DriveId.getResourceId());

它们都成对正常工作,我选择了ResourceId变种,因为这个短字符串出现在其他系统中使用的http地址中(Apps Script ...)。例如: https://docs.google.com/file/d/UW2aFJfdajB3M3JENy00Ums0B1mQ
此外,即使文件在Google云端硬盘中被操作(删除,恢复,移动),它似乎也是持久的。

但是在4.2中, createFromResourceId()消失, CAN NOT 被“decodeFromString()”替换为:

//INCORRECT    
DriveId.decodeFromString(DriveId.getResourceId());

相反,必须以这种方式检索ResourceId中的DriveId:

DriveIdResult result = Drive.DriveApi.fetchDriveId(GAC, DriveId.getResourceId()).await();
DriveId drvID = result.getDriveId();

(为简单起见,我使用“await”版本)。

所以结论是: createFromResourceId()被

取代
Drive.DriveApi.fetchDriveId(GAC, DriveId.getResourceId()).await().getDriveId()

需要注意的是“await()”构造应该作为普通UI线程中的回调实现。

更新时间(2014-10-23)

上面的答案非常陈旧,请参阅下面的评论。

答案 1 :(得分:0)

createFromResourceId已重命名为decodeFromString

DriveId sFolderId = DriveId.decodeFromString("0B2EE......N3J6RU0");