6

Google ドライブを自分のアプリに統合したい Google Developers Console に自分のアプリを登録しました。https://github.com/googledrive/android-demosからサンプルを入手しました。これにより、Googleドライブのルートフォルダーにファイル、フォルダーを作成できますが、問題は、ファイルまたはフォルダーを作成できなかったことです既存のフォルダー。そのような場合、「DriveId が見つかりません。このファイルを表示する権限がありますか?」というトーストメッセージが表示されます。つまり、ドライブ ID を取得できません

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");
    }
};
}

これに関する適切なドキュメントが見つかりません。どこが間違っているか、または他の権限を含める必要があるかどうかを教えてください

4

3 に答える 3

4

ここでちょっと見てみましょう。「createTree()」メソッドでは、フォルダー内にフォルダーが作成されます。

新しい Google Drive Android API (GDAA) には 3 つの異なるドライブ ID エンティティがあります

  1. タイプ DriveID のオブジェクト - メソッドから取得し、コードで使用するもの
  2. encodeToString()から取得し、decodeFromString() に渡す文字列-アプリ内で保存するために使用されます (キャッシュなど)
  3. getResourceId()から取得してfetchDriveId()に渡す文字列- ファイルの html アドレスに表示される文字列。

2 と 3 の識別子はどちらも文字列なので、混乱する可能性があります。(decodeFromString() を介して) ドライブ ID を取得する場合、識別子 2 の方が高速です。識別子 3 は (fetchDriveId() を介して) 取得するのが遅くなりますが、ID を別の場所 (Apps Script など) で取得する必要がある場合に役立ちます。

こちらもご覧ください: SO 21800257

于 2014-03-09T18:16:04.570 に答える
1

EXISTING_FOLDER_ID とは何ですか? 何も変更せずにそのままサンプルを実行しようとしている場合、これは機能しません。

EXISTING_FOLDER_ID を、アプリがアクセスできるフォルダーのリソース ID に変更する必要があります。これは、アプリがルートに作成したフォルダーである可能性があります。

于 2014-03-04T20:52:27.210 に答える
0

まず、creatreeTree() を使用してフォルダーを作成します。

次に、検索クエリを実行して create の ID を取得します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; }

フォルダー ID を取得したら、このコードを使用してフォルダー内にフォルダーを作成します ` public static ParentReference insertFileIntoFolder(Drive service, String folderId, String folderName) throws IOException {

// Log.e("founddd",id); ファイル fileMetadata = new File(); fileMetadata.setParents(Collections.singletonList(new ParentReference().setId(folderId == null ? "root" : folderId))); fileMetadata.setTitle(フォルダ名); fileMetadata.setMimeType("application/vnd.google-apps.folder");

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

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




    return null;
}`
于 2016-04-20T05:59:12.880 に答える