Создание папки внутри папки в google drive android

Я хочу интегрировать Google Диск с моим приложением. Я зарегистрировал свое приложение в Google Developers Console. Я получил образец из https://github.com/googledrive/android-demos. Я могу создать файл или папку в корневой папке диска Google, но проблема в том, что я не могу создать файл или папку внутри существующей папки. В таком случае у меня появляется всплывающее сообщение «Не могу найти DriveId. Вы авторизованы для просмотра этого файла?» т.е. я не могу получить driveID

public class CreateFolderInFolderActivity extends BaseDemoActivity {

@Override
public void onConnected(Bundle connectionHint) {
    super.onConnected(connectionHint);
    Drive.DriveApi.fetchDriveId(getGoogleApiClient(), EXISTING_FOLDER_ID)
            .setResultCallback(idCallback);
}

final ResultCallback<DriveIdResult> idCallback = new ResultCallback<DriveIdResult>() {
    @Override
    public void onResult(DriveIdResult result) {
        if (!result.getStatus().isSuccess()) {
             showMessage(result.getStatus().toString());
            showMessage("Cannot find DriveId. Are you authorized to view this file?");
            return;
        }
        DriveFolder folder = Drive.DriveApi
                .getFolder(getGoogleApiClient(), result.getDriveId());
        MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                .setTitle("MyNewFolder").build();
        folder.createFolder(getGoogleApiClient(), changeSet)
                .setResultCallback(createFolderCallback);
    }
};

final ResultCallback<DriveFolderResult> createFolderCallback = new
        ResultCallback<DriveFolderResult>() {

    @Override
    public void onResult(DriveFolderResult result) {
        if (!result.getStatus().isSuccess()) {
            showMessage("Problem while trying to create a folder");
            return;
        }
        showMessage("Folder successfully created");
    }
};
}

Я не могу найти для этого подходящую документацию. Пожалуйста, помогите мне, где я ошибаюсь, или нужно ли мне включать какие-либо другие разрешения


person Dhiliph Soundher    schedule 03.03.2014    source источник


Ответы (3)


Вы можете заглянуть сюда: в разделе 'createTree () ', происходит создание папки внутри папки.

В новом API Google Диска для Android (GDAA) есть 3 разных идентификатора диска.

  1. объект типа DriveID - тот, который вы получаете из методов и используете в своем коде
  2. строка, которую вы получаете из encodeToString () и передаете в decodeFromString () - используется для сохранения в приложении (например, кэширование)
  3. строка, которую вы получаете от getResourceId () и передаете в fetchDriveId () - ту, которую вы видите в html-адресе файла.

Идентификаторы 2 и 3 являются строками, поэтому их можно спутать. Идентификатор 2 быстрее при получении идентификатора диска (через decodeFromString ()). Идентификатор 3 получается медленнее (через fetchDriveId ()), но он полезен, если вам нужно взять свой идентификатор в другом месте (например, в скрипте приложений).

См. Также: SO 21800257

person seanpj    schedule 09.03.2014
comment
Могу я сказать общедоступная статическая конечная строка EXISTING_FOLDER_ID = CAESABjACiCShczj8lI =; - person Nabin; 24.02.2015
comment
Я скопировал идентификатор папки при ее создании - person Nabin; 24.02.2015
comment
Ссылка @seanpj не работает. - person nasch; 12.11.2017

Что такое EXISTING_FOLDER_ID? Если вы пытаетесь просто запустить образец без внесения каких-либо изменений, это не сработает.

Вам необходимо изменить EXISTING_FOLDER_ID на идентификатор ресурса папки, к которой ваше приложение имеет доступ. Это может быть папка, созданная вашим приложением в корне.

person Cheryl Simon    schedule 04.03.2014
comment
Да, я сделал этот EXISTING_FOLDER_ID динамически со значениями driveid для папки, которую я создаю, но я получаю сетевую ошибку при вызове функции idCallback - person Dhiliph Soundher; 06.03.2014

сначала создайте папку с помощью creatreeTree ()

затем запустите поисковый запрос, чтобы получить идентификатор создания public static ArrayList<ContentValues> search(String prnId, String titl, String mime) { ArrayList<ContentValues> gfs = new ArrayList<>(); if (mGOOSvc != null && mConnected) try { // add query conditions, build query String qryClause = "'me' in owners and "; if (prnId != null) qryClause += "'" + prnId + "' in parents and "; if (titl != null) qryClause += "title = '" + titl + "' and "; if (mime != null) qryClause += "mimeType = '" + mime + "' and "; qryClause = qryClause.substring(0, qryClause.length() - " and ".length()); Drive.Files.List qry = mGOOSvc.files().list().setQ(qryClause) .setFields("items(id,mimeType,labels/trashed,title),nextPageToken"); String npTok = null; if (qry != null) do { FileList gLst = qry.execute(); if (gLst != null) { for (File gFl : gLst.getItems()) { if (gFl.getLabels().getTrashed()) continue; gfs.add( UT.newCVs(gFl.getTitle(), gFl.getId(), gFl.getMimeType())); } //else UT.lg("failed " + gFl.getTitle()); npTok = gLst.getNextPageToken(); qry.setPageToken(npTok); } } while (npTok != null && npTok.length() > 0); //UT.lg("found " + vlss.size()); } catch (Exception e) { UT.le(e); } return gfs; }

когда вы получаете идентификатор папки, используйте этот код для создания папки в папке `public static ParentReference insertFileIntoFolder (служба диска, String folderId, String folderName) выдает исключение IOException {

// Log.e ("founddd", id); Файл fileMetadata = новый файл (); fileMetadata.setParents (Collections.singletonList (new ParentReference (). setId (folderId == null? "root": folderId))); fileMetadata.setTitle (имя_папки); fileMetadata.setMimeType ("приложение / vnd.google-apps.folder");

        File file  = mGOOSvc.files().insert(fileMetadata).execute();

        System.out.println("Folder ID: " + file.getId());
        strChildFolder = file.getId();




    return null;
}`
person bambi    schedule 20.04.2016