Я новичок в Google Android API Android, и я его изучаю. Но я столкнулся с проблемой: я не могу удалить файл с помощью Google Диска Android API, нет примера. Может ли кто-нибудь помочь мне с этим вопросом? Большое спасибо.Как удалить файл на Google Диске с помощью Google Диска API Android
ответ
UPDATE (апрель 2015)
GDAA, наконец, имеет свой собственный «trash» функциональность визуализации ответ ниже неуместны.
ОРИГИНАЛЬНЫЙ ОТВЕТ:
Как уже упоминалось выше, Шерил, вы можете объединить эти два API.
Следующий фрагмент кода, взятый из here, показывает, как это можно сделать:
Во-первых, получить доступ к обоим GoogleApiClient и ... services.drive.Drive
GoogleApiClient _gac;
com.google.api.services.drive.Drive _drvSvc;
public void init(MainActivity ctx, String email){
// build GDAA GoogleApiClient
_gac = new GoogleApiClient.Builder(ctx).addApi(com.google.android.gms.drive.Drive.API)
.addScope(com.google.android.gms.drive.Drive.SCOPE_FILE).setAccountName(email)
.addConnectionCallbacks(ctx).addOnConnectionFailedListener(ctx).build();
// build RESTFul (DriveSDKv2) service to fall back to for DELETE
com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential crd =
GoogleAccountCredential
.usingOAuth2(ctx, Arrays.asList(com.google.api.services.drive.DriveScopes.DRIVE_FILE));
crd.setSelectedAccountName(email);
_drvSvc = new com.google.api.services.drive.Drive.Builder(
AndroidHttp.newCompatibleTransport(), new GsonFactory(), crd).build();
}
Во-вторых, реализовать RESTful API вызовы на DriveId GDAA в:
public void trash(DriveId dId) {
try {
String fileID = dId.getResourceId();
if (fileID != null)
_drvSvc.files().trash(fileID).execute();
} catch (Exception e) {}
}
public void delete(DriveId dId) {
try {
String fileID = dId.getResourceId();
if (fileID != null)
_drvSvc.files().delete(fileID).execute();
} catch (Exception e) {}
}
... и voila, вы удаляете свои файлы. И, как обычно, не без проблем.
Во-первых, если вы пытаетесь удалить файл сразу после того, как вы создали его, getResourceId() падает на его лицо, возвращая нулевой. Не связанный с этим вопросом, я собираюсь поднять SO-nag на нем.
И, во-вторых, ЭТО ХОК!, и он не должен оставаться в вашем коде после реализации GDAA функций TRASH и DELETE.
https://developers.google.com/drive/v2/reference/files/delete
Вам нужен файл идентификатор, чтобы удалить файл и экземпляр службы:
import com.google.api.services.drive.Drive;
...
private static void deleteFile(Drive service, String fileId) {
try {
service.files().delete(fileId).execute();
} catch (IOException e) {
System.out.println("An error occurred: " + e);
}
}
Этот пример совместим с этим примером? https://github.com/googledrive/android-demos/blob/master/src/com/google/android/gms/drive/sample/demo/CreateFileActivity.java – tonylin
Хотя эта ссылка может ответить на вопрос, это лучше чтобы включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – MackieeE
Он должен, потому что вам просто нужен идентификатор файла, чтобы удалить его, и вы получите идентификатор в своем примере. –
удаление файла не поддерживается. Вы всегда можете вернуться к использованию RESTful API для таких вещей.
Удалить поддерживается API Google Диска Android с сервисов Google Play 7.5 с использованием метода DriveResource.delete().
Мы рекомендуем использовать мусор для видимых файлов пользователя, а не удалять, чтобы дать пользователям возможность восстановить случайно поврежденный контент. Удалить является постоянным и рекомендуется только для содержимого папки приложения, где корзина недоступна.
Я должен добавить, есть еще одна проблема с этим взломом. После удаления/удаления файла/папки таким образом он будет отображаться как VALID/ALIVE, если вы обратитесь к нему через GDAA (запрос, используя его идентификатор ресурса, ...), поскольку он кэшируется службами Google Play. В результате ваше приложение может писать в файл/создание объектов в папке, которая больше не существует. А задержка «обновления» может быть значительно длинной (часы). – seanpj
Это все еще работает? Где GoogleAccountCredential? и AndroidHttp? Спасибо – Nabin
Это так, но будьте осторожны с задержкой. Мне удалось удалить файлы/папки в RESTful, и после этого GDAA не выдал мне никаких предупреждений, поэтому я мог писать в файлы с неработающими/несуществующими файлами или даже создавать новые файлы в удаленной папке. Существует 2 уровня удаления в RESUST (или на диске), TRASH и DELETE. В GDAA точно не сообщается. Вы можете подключить код здесь к этой демонстрации на Github (https://github.com/seanpjanson/GDAADemo) и поиграть с ним, чтобы увидеть подводные камни. Учетные данные/авторизационная информация хорошо ((MainActivity). См. SO 28439129. – seanpj