proveedor - Google Calendar API V3 Java: no se puede usar ''primary'' para calendarios: get
google calendar event (2)
Reemplace esta importación com.google.api.services.calendar.Calendar con com.google.api.services.calendar.model.Calendar.
Soy muy nuevo en la API de Google Calendar V3 Java. Estoy desarrollando en Java, usando Eclipse. Hasta ahora, he tenido éxito en:
- Obtener los resúmenes de CalendarList de todos los calendarios diferentes dentro de una cuenta de Google en particular
- Obteniendo el resumen de CalendarList de solo uno de los calendarios dentro de una cuenta de Google en particular, usando el ID de calendario como identificador.
Ahora, me gustaría explorar calendarios en lugar de CalendarList. Intenté implementar el método de obtener calendarios. Sin embargo, estoy enfrentando un problema.
El tutorial de Google lo dice como un código de ejemplo:
Calendar calendar = service.calendars().get(''primary'').execute();
System.out.println(calendar.getSummary());
Sin embargo, Eclipse resalta el ''primario'' y dice que es una "Constante de caracteres inválidos".
Traté de cambiarlo en una cadena "primaria" en su lugar, y Eclipse resalta toda la línea, diciendo que hay una discrepancia de tipo.
No estoy muy seguro de lo que realmente se espera de la serie "primaria" de cadenas que se da en el tutorial de Google. ¿Se supone que debo reemplazarlo con la identificación del calendario principal? Intenté eso, como una cadena y como una matriz de caracteres, pero sigo recibiendo errores de compilación de Eclipse.
Aquí está mi código usado:
public static void getCalendarSummary(String calendarID, Calendar service) throws IOException{
Calendar calendar = service.calendars().get("primary").execute();
System.out.println(calendar.getSummary());
}
¿Alguien podría aclararme lo que estoy haciendo mal? He buscado en todas las referencias de tutoriales de Google, pero no he podido llegar a una conclusión. Gracias.
Este es el enlace al tutorial de Google: https://developers.google.com/google-apps/calendar/v3/reference/calendars/get?hl=fr
Editar: Después de ejecutar el programa, esto es lo que obtengo. Los primeros dos métodos funcionan bien y ofrecen los resultados correctos. Sin embargo, aparece un error para el método en cuestión - problema de compilación no resuelto - constante de caracteres no válidos. Aquí está la respuesta completa:
Go to the following address:
https://accounts.google.com/o/oauth2/auth?client_id=369332843116-gr8ct1guerlf1fudpgivfjv43h0oleip.apps.googleusercontent.com&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&scope=https://www.googleapis.com/auth/calendar
What is the ''code'' url parameter?
4/LvuhiV9Qb_gzCgXmkveIw2kfbOFA.gtXwZ0hWA0QRcp7tdiljKKa1LV4tkQI
GooCal
ID: [email protected]
Summary: DEADLINES
ID: [email protected]
Summary: Calendar 1
ID: [email protected]
Summary: LightUp
ID: i.*****@gmail.com
Summary: Personal Events
ID: w*****@gmail.com
Summary: w*****@gmail.com
ID: [email protected]
Summary: Team A********** - Orbital Project
ID: [email protected]
Summary: TechTouch - GG Fix
ID: [email protected]
Summary: GooCal
ID: en.singapore#[email protected]
Summary: Holidays in Singapore
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Invalid character constant
at SimpleCalendarTest.getCalendarSummary(SimpleCalendarTest.java:100)
at SimpleCalendarTest.main(SimpleCalendarTest.java:81)
Aquí está mi código completo, si lo ayudará. :)
import java.io.IOException;
import java.util.Collections;
import java.util.Scanner;
import java.util.Set;
import com.google.api.client.auth.oauth2.AuthorizationCodeFlow;
import com.google.api.client.auth.oauth2.AuthorizationCodeRequestUrl;
import com.google.api.client.auth.oauth2.AuthorizationCodeTokenRequest;
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.auth.oauth2.TokenResponse;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson.JacksonFactory;
import com.google.api.services.calendar.Calendar;
import com.google.api.services.calendar.CalendarScopes;
import com.google.api.services.calendar.model.CalendarList;
import com.google.api.services.calendar.model.CalendarListEntry;
import com.google.api.services.calendar.model.*;
public class SimpleCalendarTest {
public static void main(String[] args) throws IOException{
//Two globals that will be used in each step.
HttpTransport httpTransport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
//Create the authorization code flow manager
Set<String> scope = Collections.singleton(CalendarScopes.CALENDAR);
String clientId = "xxxxxxx";
String clientSecret = "xxxxxxx";
//Use a factory pattern to create the code flow
AuthorizationCodeFlow.Builder codeFlowBuilder =
new GoogleAuthorizationCodeFlow.Builder(
httpTransport,
jsonFactory,
clientId,
clientSecret,
scope
);
AuthorizationCodeFlow codeFlow = codeFlowBuilder.build();
//set the code flow to use a dummy user
//in a servlet, this could be the session id
String userId = "ipeech";
//"redirect" to the authentication url
String redirectUri = "urn:ietf:wg:oauth:2.0:oob";
AuthorizationCodeRequestUrl authorizationUrl = codeFlow.newAuthorizationUrl();
authorizationUrl.setRedirectUri(redirectUri);
System.out.println("Go to the following address:");
System.out.println(authorizationUrl);
//use the code that is returned as a url parameter
//to request an authorization token
System.out.println("What is the ''code'' url parameter?");
String code = new Scanner(System.in).nextLine();
AuthorizationCodeTokenRequest tokenRequest = codeFlow.newTokenRequest(code);
tokenRequest.setRedirectUri(redirectUri);
TokenResponse tokenResponse = tokenRequest.execute();
//Now, with the token and user id, we have credentials
Credential credential = codeFlow.createAndStoreCredential(tokenResponse, userId);
//Credentials may be used to initialize http requests
HttpRequestInitializer initializer = credential;
//and thus are used to initialize the calendar service
Calendar.Builder serviceBuilder = new Calendar.Builder(
httpTransport, jsonFactory, initializer);
serviceBuilder.setApplicationName("GooCal");
Calendar calendar = serviceBuilder.build();
//get some data
String calendarID = "[email protected]";
getCalendarListSummary(calendarID,calendar);
getAllCalendarListSummary(calendar);
getCalendarSummary(calendarID,calendar);
}
public static void getCalendarListSummary(String calendarID, Calendar calendar) throws IOException{
CalendarListEntry calendarListEntry = calendar.calendarList().get(calendarID).execute();
System.out.println(calendarListEntry.getSummary());
}
public static void getAllCalendarListSummary (Calendar calendar) throws IOException{
Calendar.CalendarList.List listRequest = calendar.calendarList().list();
CalendarList feed = listRequest.execute();
for(CalendarListEntry entry:feed.getItems()){
System.out.println("ID: " + entry.getId());
System.out.println("Summary: " + entry.getSummary());
}
}
public static void getCalendarSummary(String calendarID, Calendar service) throws IOException{
Calendar calendar = service.calendars().get(''primary'').execute();
System.out.println(calendar.getSummary());
}
}
¡Gracias! :)
Editar 2: Cuando reemplazo "primario" por "primario", este es el mensaje de error que recibo.
What is the ''code'' url parameter?
4/LvuhiV9Qb_gzCgXmkveIw2kfbOFA.gtXwZ0hWA0QRcp7tdiljKKa1LV4tkQI
GooCal
ID: [email protected]
Summary: DEADLINES
ID: [email protected]
Summary: Calendar 1
ID: [email protected]
Summary: LightUp
ID: i.*****@gmail.com
Summary: Personal Events
ID: w*****@gmail.com
Summary: w*****@gmail.com
ID: [email protected]
Summary: Team A********** - Orbital Project
ID: [email protected]
Summary: TechTouch - GG Fix
ID: [email protected]
Summary: GooCal
ID: en.singapore#[email protected]
Summary: Holidays in Singapore
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Type mismatch: cannot convert from com.google.api.services.calendar.model.Calendar to com.google.api.services.calendar.Calendar
The method getSummary() is undefined for the type Calendar
at SimpleCalendarTest.getCalendarSummary(SimpleCalendarTest.java:100)
at SimpleCalendarTest.main(SimpleCalendarTest.java:81)
Parece que hay un desajuste de tipo. ¡Gracias por tu ayuda!
Editar 3: Reemplazar importación com.google.api.services.calendar.Calendar con com.google.api.services.calendar.model.Calendar causa otros problemas. Eclipse destaca que el código utilizado para inicializar el servicio de calendario tiene un problema. Calendar.Builder no se puede resolver como un tipo.
Calendar.Builder serviceBuilder = new Calendar.Builder(
httpTransport, jsonFactory, initializer);
Cuando corro, obtengo este error.
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Calendar.Builder cannot be resolved to a type
Calendar.Builder cannot be resolved to a type
at SimpleCalendarTest.main(SimpleCalendarTest.java:73)
¡Gracias por tu ayuda!
- Use comillas dobles en lugar de comillas simples alrededor de "primaria" :) Las comillas simples son para caracteres, como ''a'' en Java.
- Lea el error: "No coincidencia de tipos: no se puede convertir de com.google.api.services.calendar.model.Calendar a com.google.api.services.calendar.Calendar". Estas son dos clases completamente diferentes (tenga en cuenta los nombres del paquete), "Calendario" es solo una parte del nombre de la clase.