2017-01-09 76 views
1

我試圖使用Google Drive Service Java API上傳文件。我正在使用一個Quickstart.java示例來確定我需要編碼的內容。我收到一個編譯器錯誤。請協助解決我的編譯器錯誤。Google Drive Api Java快速入門編譯錯誤

Quickstart.java:107: error: cannot find symbol 
      .setPageSize(10) 
      ^
    symbol: method setPageSize(int) 
    location: class Drive.Files.List 
Quickstart.java:110: error: cannot find symbol 
     List<File> files = result.getFiles(); 
           ^
    symbol: method getFiles() 
    location: variable result of type FileList 
Quickstart.java:116: error: cannot find symbol 
       System.out.printf("%s (%s)\n", file.getName(), file.getId()); 
                   ^
    symbol: method getId() 
    location: variable file of type File 
3 errors 

我可能會使用過時的庫,但我去了谷歌的REST網站 並下載他們的最新產品。

下面是代碼:

import com.google.api.client.auth.oauth2.Credential; 
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; 
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; 
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; 
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; 
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; 
import com.google.api.client.http.HttpTransport; 
import com.google.api.client.json.jackson2.JacksonFactory; 
import com.google.api.client.json.JsonFactory; 
import com.google.api.client.util.store.FileDataStoreFactory; 

import com.google.api.services.drive.DriveScopes; 
import com.google.api.services.drive.model.*; 
import com.google.api.services.drive.Drive; 

import java.io.File; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.Arrays; 
import java.util.List; 

public class Quickstart { 
    /** Application name. */ 
    private static final String APPLICATION_NAME = 
     "Drive API Java Quickstart"; 

    /** Directory to store user credentials for this application. */ 
    private static final java.io.File DATA_STORE_DIR = new java.io.File(
     System.getProperty("user.home"), ".credentials/drive-java-quickstart"); 

    /** Global instance of the {@link FileDataStoreFactory}. */ 
    private static FileDataStoreFactory DATA_STORE_FACTORY; 

    /** Global instance of the JSON factory. */ 
    private static final JsonFactory JSON_FACTORY = 
     JacksonFactory.getDefaultInstance(); 

    /** Global instance of the HTTP transport. */ 
    private static HttpTransport HTTP_TRANSPORT; 

    /** Global instance of the scopes required by this quickstart. 
    * 
    * If modifying these scopes, delete your previously saved credentials 
    * at ~/.credentials/drive-java-quickstart 
    */ 
    private static final List<String> SCOPES = 
     Arrays.asList(DriveScopes.DRIVE_METADATA_READONLY); 

    static { 
     try { 
      HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); 
      DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR); 
     } catch (Throwable t) { 
      t.printStackTrace(); 
      System.exit(1); 
     } 
    } 

    /** 
    * Creates an authorized Credential object. 
    * @return an authorized Credential object. 
    * @throws IOException 
    */ 
    public static Credential authorize() throws IOException { 
     // Load client secrets. 
     InputStream in = 
      Quickstart.class.getResourceAsStream("/client_secret.json"); 
     GoogleClientSecrets clientSecrets = 
      GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in)); 

     // Build flow and trigger user authorization request. 
     GoogleAuthorizationCodeFlow flow = 
       new GoogleAuthorizationCodeFlow.Builder(
         HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES) 
       .setDataStoreFactory(DATA_STORE_FACTORY) 
       .setAccessType("offline") 
       .build(); 
     Credential credential = new AuthorizationCodeInstalledApp(
      flow, new LocalServerReceiver()).authorize("user"); 
     System.out.println(
       "Credentials saved to " + DATA_STORE_DIR.getAbsolutePath()); 
     return credential; 
    } 

    /** 
    * Build and return an authorized Drive client service. 
    * @return an authorized Drive client service 
    * @throws IOException 
    */ 
    public static Drive getDriveService() throws IOException { 
     Credential credential = authorize(); 
     return new Drive.Builder(
       HTTP_TRANSPORT, JSON_FACTORY, credential) 
       .setApplicationName(APPLICATION_NAME) 
       .build(); 
    } 

    public static void main(String[] args) throws IOException { 
     // Build a new authorized API client service. 
     Drive service = getDriveService(); 

     // Print the names and IDs for up to 10 files. 
     FileList result = service.files().list() 
      .setPageSize(10) 
      .setFields("nextPageToken, files(id, name)") 
      .execute(); 
     List<File> files = result.getFiles(); 
     if (files == null || files.size() == 0) { 
      System.out.println("No files found."); 
     } else { 
      System.out.println("Files:"); 
      for (File file : files) { 
       System.out.printf("%s (%s)\n", file.getName(), file.getId()); 
      } 
     } 
    } 

} 
+1

提示(因爲這個職位可以在Google Drive Platform: Downloads被發現。):粘貼的編譯器錯誤是解決這些問題的一個基本組成部分。另一部分(缺少)......給出問題的源代碼!如果您希望我們幫助您,請添加缺少的部分... – GhostCat

+0

**其他**重要的必備事項:在提出問題之後解決。 – GhostCat

+0

感謝您的迴應GhostCat。爲無法使用而道歉。 –

回答

0

我不能告訴你究竟是錯誤的;只是解釋發生了什麼。

例子 - 編譯器抱怨:

Quickstart.java:107: error: cannot find symbol 
     .setPageSize(10) 

相應的代碼是:

FileList result = service.files().list() 
     .setPageSize(10) 

讓我們來看看你得到了什麼。 service是谷歌API的Drive類的一個實例。當你開始研究javadoc時,這個類提供了一個方法files();和該調用的結果...允許調用list()。

list()應該返回類List的對象。

現在你轉向的Javadoc該類......和驚喜:有沒有方法稱爲setPageSize()

所以,長話短說:編譯器告訴你,你試圖調用某個對象的方法不存在!然後,您的反應是:

  1. 像我一樣:潛入該呼叫
  2. 看深處到文檔該類

爲了弄清楚到底是怎麼回事。

我不是那個Google API的專家,但我的猜想是:這是某種版本不兼容。可能是您從某處複製了快速入門源代碼...但是源代碼與您的編譯器在您的項目設置中看到的Google API版本完全不兼容。

所以,真正的答案在這裏:

  1. 確保示例代碼比賽您使用的是
  2. 信託編譯器的消息API版本。

並認真:如果您需要其他人來解釋這些基本的東西給你,那麼你應該先瞭解他們一些時間;例如通過編寫一些基本的Java教程。嘗試使用高級Google API時沒有意義,因爲當您需要其他人瞭解時發生了什麼。

此外:你從來沒有只是從某處放下一些代碼。你甚至在嘗試運行之前所做的最低限度的事情:完全閱讀;並瞭解那裏的每一個電話。

我希望這給你足夠的想法來解決你的實際問題。

+0

感謝您的信息。不是一個Java開發人員,但足夠知道可以提出一個問題,希望有人能夠提供幫助。 –

+0

不客氣,如果您發現我的答案充足,請考慮在某個時候接受。 – GhostCat

0

我遇到了同樣的問題,然後意識到我不小心下載了V2庫而不是V3庫。

確保你已經下載了最新的庫