2014-03-12 4 views
3

Я использую следующий код из github, но он показывает следующее сообщение об ошибке:Не удается найти DriveId. Уполномочены ли вы просматривать этот файл? интеграция Android Google Диск

toast that Cannot find DriveId. Are you authorized to view this file? 

Я не знаю, что является причиной этого.

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

/** 
* Copyright 2013 Google Inc. All Rights Reserved. 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 
* in compliance with the License. You may obtain a copy of the License at 
* 
* http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software distributed under the 
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
* express or implied. See the License for the specific language governing permissions and 
* limitations under the License. 
*/ 

package com.google.android.gms.drive.sample.demo; 

import java.io.IOException; 
import java.io.OutputStream; 

import android.content.Context; 
import android.os.Bundle; 
import android.util.Log; 

import com.google.android.gms.common.api.ResultCallback; 
import com.google.android.gms.drive.Drive; 
import com.google.android.gms.drive.DriveApi.ContentsResult; 
import com.google.android.gms.drive.DriveApi.DriveIdResult; 
import com.google.android.gms.drive.DriveFile; 

/** 
* An activity to illustrate how to edit contents of a Drive file. 
*/ 
public class EditContentsActivity extends BaseDemoActivity { 

    private static final String TAG = "EditContentsActivity"; 

    @Override 
    public void onConnected(Bundle connectionHint) { 
     super.onConnected(connectionHint); 

     final ResultCallback<DriveIdResult> idCallback = new ResultCallback<DriveIdResult>() { 
      @Override 
      public void onResult(DriveIdResult result) { 
       if (!result.getStatus().isSuccess()) { 
        showMessage("Cannot find DriveId. Are you authorized to view this file?"); 
        return; 
       } 
       DriveFile file = Drive.DriveApi.getFile(getGoogleApiClient(), result.getDriveId()); 
       new EditContentsAsyncTask(EditContentsActivity.this).execute(file); 
      } 
     }; 
     Drive.DriveApi.fetchDriveId(getGoogleApiClient(), EXISTING_FILE_ID) 
       .setResultCallback(idCallback); 
    } 

    public class EditContentsAsyncTask extends ApiClientAsyncTask<DriveFile, Void, Boolean> { 

     public EditContentsAsyncTask(Context context) { 
      super(context); 
     } 

     @Override 
     protected Boolean doInBackgroundConnected(DriveFile... args) { 
      DriveFile file = args[0]; 
      try { 
       ContentsResult contentsResult = file.openContents(
         getGoogleApiClient(), DriveFile.MODE_WRITE_ONLY, null).await(); 
       if (!contentsResult.getStatus().isSuccess()) { 
        return false; 
       } 
       OutputStream outputStream = contentsResult.getContents().getOutputStream(); 
       outputStream.write("Hello world".getBytes()); 
       com.google.android.gms.common.api.Status status = file.commitAndCloseContents(
         getGoogleApiClient(), contentsResult.getContents()).await(); 
       return status.getStatus().isSuccess(); 
      } catch (IOException e) { 
       Log.e(TAG, "IOException while appending to the output stream", e); 
      } 
      return false; 
     } 

     @Override 
     protected void onPostExecute(Boolean result) { 
      if (!result) { 
       showMessage("Error while editing contents"); 
       return; 
      } 
      showMessage("Successfully edited contents"); 
     } 
    } 
} 
+2

У вас есть решение для этого? – OMAK

ответ

2

Как сказано в сообщении, ваше приложение необходимо авторизованы для просмотра конкретного файла для того, чтобы изменить его, так как ваше приложение имеет Drive.File scope доступ.

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

+0

Пожалуйста, помогите мне установить широкую область только для чтения для приложения – OMAK

+0

В настоящее время это не доступно через API для Android. Вы можете сделать это, используя REST API. –

0

Я считаю, что это может быть связано с нашим discussion here. Если да, я бы рекомендовал вам закрыть его там, так как аудитория здесь намного шире. Пожалуйста, обратитесь к github code здесь, чтобы справиться с проблемой строки READ/WRITE. Другая проблема связана с авторизацией. Если вы на WIN7/Eclipse, this may help. Та же самая информация - here as well. В общем, не ожидайте большой помощи, API совершенно новый и немного движущаяся цель.

1

Возможно, вы сбиваете с толку ResourceId с DriveId. Попробуйте использовать ResourceId для EXISTING_FOLDER_ID или EXISTING_FILE_ID.

Вы можете получить его с помощью

driveId.getResourceId().toString() 
0

Проблема вы используете driveId для доступа к файлу или папке. что неправильно. вы должны использовать RESOURCEID этого driveid, как показано ниже:

BaseDemoActivity.EXISTING_FOLDER_ID = driveId.getResourceId().toString(); 

изменения EXISTING_FOLDER_ID от статического нестатического. и использовать этот идентификатор для дальнейшего использования.