2017-01-09 4 views
1

Я пытаюсь использовать Java API для службы Google Диска для загрузки файлов. Я использую пример Quickstart.java, чтобы выяснить, что мне нужно для кода. Я получаю ошибку компилятора. Помогите в решении моей ошибки компилятора.Ошибка компиляции Google Quick Apache Java Apache 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 

я мог бы использовать устаревшую библиотеку, но я пошел на сайт Google, 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.): Наклеивать ошибки компилятора является ONE важной частью решения таких проблем. Другая часть (отсутствует) ... исходный код, который дает проблемы! Если вы хотите, чтобы мы вам помогли, добавьте эту недостающую часть ... – 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, yep, этот класс предлагает файлы методов(); и результат этого вызова ... позволяет вызвать список().

И list() должен вернуть объект класса List.

Теперь обратимся к Javadoc для этого класса ... и удивления: нет нет метод называется setPageSize().

Итак, длинный рассказ: компилятор говорит вам, что метод, который вы пытаетесь вызвать на каком-то объекте, не существует! You реакции, то есть:

  1. , как я сделал: погружение в глубины этого вызова
  2. Посмотрите в документации для данного класса

для того, чтобы выяснить, что происходит.

Я не являюсь экспертом в том, что API Google, но мой угадывает: это своего рода несовместимость версий. Вероятно, вы скопировали исходный код Quickstart откуда-то ... но этот исходный код просто несовместим с версией API Google, которую ваш компилятор видит в вашей настройке проекта.

Таким образом, реальный ответ здесь:

  1. Убедитесь, что пример кода матчей от версии API, которые вы используете
  2. Trust сообщений компилятора.

И серьезно: если вам нужны другие люди, чтобы объяснить такие основные вещи к вам, то вы должны первый провести несколько часов обучения о них; например, работая над некоторыми базовыми учебниками по Java. Нет смысла пытаться использовать передовые API Google, когда вам нужны другие люди, чтобы понять, что происходит.

И кроме того: вы никогда не просто отложите какой-то код откуда-то. Минимальная вещь, которую вы делаете, прежде чем пытаться запустить: прочитайте ее полностью; и понимать каждый звонок в нем.

Надеюсь, это даст вам достаточно идей для решения вашей актуальной проблемы.

+0

Спасибо за информацию. Я не разработчик Java, но знаю достаточно, чтобы задать вопрос в надежде, что кто-то сможет помочь. –

+0

Добро пожаловать; если вы найдете мой ответ достаточным, подумайте о принятии в какой-то момент. – GhostCat

0

Я столкнулся с той же проблемой, а затем понял, что случайно загрузил библиотеку V2 вместо библиотеки V3.

Убедитесь, что вы загрузили самую последнюю библиотеку