Куда делся "createFromResourceId()"?

Я обновился до новой версии Google Play Services 4.2 (версия библиотеки 15). И вдруг, вызовы DriveId.createFromResourceId("....") не разрешаются.

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

Я знаю, что могу использовать вместо DriveId или encodeToString() / decodeFromString(), но:

  1. ResourceId напрямую связан с http файла в Google Диске.
  2. Кажется постоянным, даже если файл манипулирует

Как документация, так и демонстрационный код широко используют этот метод. Кроме того, зеркальный метод getResourceId() все еще существует.
Больше, чем вопрос, это запрос на разъяснения от людей Google Drive / Google Play Svcs.

2 ответа

Решение

Я проверил ответ Бурку, и, к сожалению, он не сработал. Или я неправильно сформулировал вопрос. Я постараюсь перефразировать его (и я нашел правильный ответ).

Существует два разных представления идентификатора типа строки для DriveId (как файла, так и папки).

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

В 4.1 было 2 метода, которые вернули бы их обратно в 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() исчез и НЕ МОЖЕТ быть заменен на "decodeFromString()" следующим образом:

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

Вместо этого DriveId из ResourceId должен быть получен следующим образом:

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

(и я использую версию "жду" для простоты).

Итак, вывод таков: createFromResourceId() был заменен

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

с оговоркой, что конструкция "await()" должна быть реализована как обратный вызов в обычном потоке пользовательского интерфейса.

ОБНОВЛЕНИЕ (2014-10-23)

Ответ выше довольно несвежий, пожалуйста, обратитесь к комментариям ниже.

createFromResourceId переименован в decodeFromString,

DriveId sFolderId = DriveId.decodeFromString("0B2EE......N3J6RU0"); 
Другие вопросы по тегам