Куда делся "createFromResourceId()"?
Я обновился до новой версии Google Play Services 4.2 (версия библиотеки 15). И вдруг, вызовы DriveId.createFromResourceId("....") не разрешаются.
DriveId sFolderId = DriveId.createFromResourceId("0B2EE......N3J6RU0");
Я знаю, что могу использовать вместо DriveId или encodeToString() / decodeFromString(), но:
- ResourceId напрямую связан с http файла в Google Диске.
- Кажется постоянным, даже если файл манипулирует
Как документация, так и демонстрационный код широко используют этот метод. Кроме того, зеркальный метод 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");