2012-06-29 23 views
0

看來,最近發佈的Google Drive SDK支持目錄列表。任何人都可以在Android中獲得目錄列表功能

https://developers.google.com/drive/v2/reference/files/list

我嘗試把它融入我的Android應用程序。

package com.jstock.cloud; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import android.util.Log; 

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; 
import com.google.api.client.googleapis.services.GoogleKeyInitializer; 
import com.google.api.client.http.HttpTransport; 
import com.google.api.client.json.JsonFactory; 
import com.google.api.client.json.gson.GsonFactory; 
import com.google.api.client.extensions.android2.AndroidHttp; 
import com.google.api.services.drive.Drive; 
import com.google.api.services.drive.Drive.Files; 
import com.google.api.services.drive.model.File; 
import com.google.api.services.drive.model.FileList; 
import com.jstock.gui.Utils; 

public class CloudFile { 
    public final java.io.File file; 
    public final long checksum; 
    public final long date; 
    public final int version; 
    private CloudFile(java.io.File file, long checksum, long date, int version) { 
     this.file = file; 
     this.checksum = checksum; 
     this.date = date; 
     this.version = version; 
    } 

    public static CloudFile newInstance(java.io.File file, long checksum, long date, int version) { 
     return new CloudFile(file, checksum, date, version); 
    } 

    public static CloudFile loadFromGoogleDrive(String authToken) { 
     final HttpTransport transport = AndroidHttp.newCompatibleTransport(); 
     final JsonFactory jsonFactory = new GsonFactory(); 
     GoogleCredential credential = new GoogleCredential(); 
     credential.setAccessToken(authToken); 
     Drive service = new Drive.Builder(transport, jsonFactory, credential) 
      .setApplicationName(Utils.getApplicationName()) 
      .setJsonHttpRequestInitializer(new GoogleKeyInitializer(ClientCredentials.KEY)) 
      .build(); 

     List<File> files = retrieveAllFiles(service); 
     Log.i("CHEOK", "size is " + files.size()); 
     for (File file : files) { 
      Log.i(TAG, "title = " + file.getTitle()); 
     } 
     return null; 
    } 

    /** 
    * Retrieve a list of File resources. 
    * 
    * @param service Drive API service instance. 
    * @return List of File resources. 
    */ 
    private static List<File> retrieveAllFiles(Drive service) { 
     List<File> result = new ArrayList<File>(); 
     Files.List request = null; 
     try { 
      request = service.files().list(); 
     } catch (IOException e) { 
      Log.e(TAG, "", e); 
      return result; 
     } 

     do { 
      try { 
       FileList files = request.execute(); 

       result.addAll(files.getItems()); 
       request.setPageToken(files.getNextPageToken()); 
      } catch (IOException e) { 
       Log.e(TAG, "", e); 
       request.setPageToken(null); 
      } 
     } while (request.getPageToken() != null && request.getPageToken().length() > 0); 

     Log.i("CHEOK", "yup!"); 
     return result; 
    } 

    private static final String TAG = "CloudFile"; 
} 

我總是得到0文件從服務器返回,並沒有拋出任何異常。有什麼我錯過了嗎?

回答

2

您有權要求訪問完整的驅動器範圍列出所有文件:https://developers.google.com/drive/scopes#requesting_full_drive_scope_for_an_app

如果使用缺省(推薦)範圍https://www.googleapis.com/auth/drive.file,你將只能看到由應用程序創建或打開文件。

+0

謝謝。 'oauth2:https:// www.googleapis.com/auth/drive'適用於我的情況 –

+0

謝謝,因爲這個問題,我的頭撞牆了幾個小時。 –

相關問題