java से - Google कैलेंडर एपीआई V3 जावा:कैलेंडर के लिए 'प्राथमिक' का उपयोग करने में असमर्थ:प्राप्त करें




संबंधित प्रश्न (3)

यह आयात com.google.api.services.calendar.Colendar को com.google.api.services.calendar.model.Calendar के साथ बदलें।

मैं Google कैलेंडर V3 जावा एपीआई के लिए बहुत नया हूँ मैं जावा में विकास कर रहा हूं, एक्लिप्स का उपयोग कर रहा हूँ अब तक, मैं इसमें सफल रहा हूं:

  1. किसी विशिष्ट Google खाते के अंदर कैलेंडर के सभी अलग-अलग कैलेंडरों का सारांश प्राप्त करना
  2. कैलेंडर प्राप्त करना एक पहचानकर्ता के रूप में कैलेंडर आईडी का उपयोग करते हुए, किसी विशेष Google खाते के भीतर कैलेंडर में से केवल एक कैलेंडर का सारांश।

अब, मैं कैलेंडर सूची के बदले कैलेंडर तलाशना चाहूंगा मैं कैलेंडर को लागू करने की कोशिश की विधि मिल हालांकि, मुझे एक समस्या का सामना करना पड़ रहा है।

Google के ट्यूटोरियल एक उदाहरण कोड के रूप में बताते हैं:

Calendar calendar = service.calendars().get('primary').execute();
System.out.println(calendar.getSummary());

हालांकि, ईक्लिप्स 'प्राथमिक' को उजागर करता है और कहता है कि यह एक "अमान्य चरित्र निरंतर" है

मैंने इसे एक स्ट्रिंग "प्राथमिक" के बजाय बदलने की कोशिश की, और ग्रहण पूरी रेखा को उजागर करता है, कह रही है कि एक प्रकार का बेमेल है

मैं बहुत अनिश्चित हूँ कि Google के ट्यूटोरियल में दिए गए स्ट्रिंग्स की 'प्राथमिक' सरणी से वास्तव में क्या अपेक्षित है I क्या मैं इसे प्राथमिक कैलेंडर के कैलेंडर आईडी के साथ बदलना चाहूंगा? मैंने कोशिश की, दोनों एक स्ट्रिंग के रूप में और वर्णों की एक सरणी के रूप में, लेकिन मैं एक्लिप्स से संकलन त्रुटियों को जारी रखता हूं।

यहां मेरा कोड है:

public static void getCalendarSummary(String calendarID, Calendar service) throws IOException{ 
    Calendar calendar = service.calendars().get("primary").execute();
    System.out.println(calendar.getSummary());
}

क्या मुझे किसी भी चीज के बारे में समझने में सक्षम होगा जो मैं गलत कर रहा हूं? मैंने सभी Google ट्यूटोरियल संदर्भों की खोज की है, लेकिन एक निष्कर्ष पर आने में विफल रहे धन्यवाद।

यह Google के ट्यूटोरियल का लिंक है: https://developers.google.com/google-apps/calendar/v3/reference/calendars/get?hl=fr

संपादित करें: प्रोग्राम चलाने के बाद, यह मुझे मिल रहा है। पहले दो तरीके ठीक काम करते हैं और सही परिणाम देते हैं। हालांकि, मुझे प्रश्न में विधि के लिए एक त्रुटि मिलती है - अनसुलझे संकलन समस्या - अवैध वर्ण निरंतर यहाँ पूरी प्रतिक्रिया है:

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].calendar.google.com
Summary: DEADLINES
ID: [email protected].calendar.google.com
Summary: Calendar 1
ID: [email protected].calendar.google.com
Summary: LightUp
ID: i.*****@gmail.com
Summary: Personal Events
ID: w*****@gmail.com
Summary: w*****@gmail.com
ID: [email protected].calendar.google.com
Summary: Team A********** - Orbital Project
ID: [email protected].calendar.google.com
Summary: TechTouch - GG Fix
ID: [email protected].calendar.google.com
Summary: GooCal
ID: en.singapore#[email protected].v.calendar.google.com
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)

यह मेरा पूरा कोड है, अगर यह मदद करेगा :)

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());
    }
}

धन्यवाद! :)

2 संपादित करें: जब मैं 'प्राथमिक' को "प्राथमिक" के साथ बदलता हूं, तो यह त्रुटि संदेश मुझे मिलता है I

What is the 'code' url parameter?
    4/LvuhiV9Qb_gzCgXmkveIw2kfbOFA.gtXwZ0hWA0QRcp7tdiljKKa1LV4tkQI
    GooCal
    ID: [email protected].calendar.google.com
    Summary: DEADLINES
    ID: [email protected].calendar.google.com
    Summary: Calendar 1
    ID: [email protected].calendar.google.com
    Summary: LightUp
    ID: i.*****@gmail.com
    Summary: Personal Events
    ID: w*****@gmail.com
    Summary: w*****@gmail.com
    ID: [email protected].calendar.google.com
    Summary: Team A********** - Orbital Project
    ID: [email protected].calendar.google.com
    Summary: TechTouch - GG Fix
    ID: [email protected].calendar.google.com
    Summary: GooCal
    ID: en.singapore#[email protected].v.calendar.google.com
    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)

ऐसा प्रतीत होता है कि एक प्रकार का बेमेल है आपकी सहायताके लिए धन्यवाद!

3 संपादित करें: com.google.api.services.calendar आयात करें। Com.google.api.services.calendar.model.Calendar के साथ कैलेंडर अन्य समस्याएं पैदा करता है। ग्रहण हाइलाइट करता है कि कैलेंडर सेवा को प्रारंभ करने के लिए उपयोग किए जाने वाला कोड एक समस्या है। Calendar.Builder एक प्रकार के रूप में हल नहीं किया जा सकता।

Calendar.Builder serviceBuilder = new Calendar.Builder(
                httpTransport, jsonFactory, initializer);

जब मैं चलाता हूं, तो मुझे यह त्रुटि मिलती है

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)

आपकी सहायताके लिए धन्यवाद!


  1. "प्राथमिक" के आसपास एकल उद्धरण चिह्नों के बजाय दोहरे उद्धरण चिह्नों का उपयोग करें :) एकल उद्धरण वर्णों के लिए होते हैं, जैसे जावा में 'ए'।
  2. त्रुटि पढ़ें: "प्रकार बेमेल: com.google.api.services.calendar.model.Calendar से com.google.api.services.calendar.Calendar" में कनवर्ट नहीं किया जा सकता है। ये दो बिल्कुल अलग वर्ग हैं (पैकेज के नामों को ध्यान में रखते हैं), "कैलेंडर" वर्ग के नाम का सिर्फ एक हिस्सा है।

tl; डॉ

Date और Calendar आसपास वर्तमान "सर्वोत्तम अभ्यास" की सलाह दें

Calendar पर Date का हमेशा अनुकूल होना सर्वोत्तम है

पूरी तरह से इन विरासत वर्गों से बचें । इसके बजाय java.time कक्षाओं का प्रयोग करें।

  • UTC में एक पल के लिए, Instant उपयोग करें
    ( Date के आधुनिक समतुल्य)
  • किसी विशेष समय क्षेत्र में एक पल के लिए, ZonedDateTime उपयोग ZonedDateTime
    ( GregorianCalendar के आधुनिक समतुल्य)
  • एक विशेष offset-from-UTC में एक पल के लिए, OffsetDateTime उपयोग OffsetDateTime
    (विरासत कक्षाओं में कोई समकक्ष नहीं)
  • अज्ञात समय क्षेत्र या ऑफसेट के साथ डेट-टाइम (एक पल नहीं) के लिए, LocalDateTime उपयोग LocalDateTime
    (विरासत कक्षाओं में कोई समकक्ष नहीं)

विवरण

ऑर्टोमाला लोकनी का उत्तर परेशानी पुरानी विरासत दिनांक-समय कक्षाओं ( Date , Calendar इत्यादि) की बजाय आधुनिक java.time कक्षाओं का उपयोग करने का सुझाव देने का अधिकार है। लेकिन वह उत्तर गलत वर्ग को बराबर समझाता है (उस उत्तर पर मेरी टिप्पणी देखें)।

जावा.टाइम का उपयोग करना

जावा.टाइम कक्षाएं लीगेसी डेट-टाइम कक्षाओं, रात-दर-दिन अंतर पर एक बड़ा सुधार है। पुरानी कक्षाएं खराब-डिजाइन, भ्रमित और परेशानी हैं। जब भी संभव हो, आपको पुरानी कक्षाओं से बचना चाहिए। लेकिन जब आपको पुराने / नए में कनवर्ट करने की आवश्यकता होती है, तो आप पुरानी कक्षाओं में नए तरीकों को जोड़कर ऐसा कर सकते हैं।

रूपांतरण पर अधिक जानकारी के लिए, मेरे उत्तर और निफ्टी आरेख को किसी अन्य प्रश्न पर देखें, java.util.Date को "java.time" प्रकार में बदलें? ।

खोज स्टैक ओवरफ़्लो java.time का उपयोग करने पर कई सैकड़ों उदाहरण प्रश्न और उत्तर देता है। लेकिन यहां एक त्वरित सारांश है।

Instant

एक Instant साथ वर्तमान पल प्राप्त करें। Instant क्लास UTC में टाइमलाइन पर nanoseconds संकल्प के साथ एक पल का प्रतिनिधित्व करता है (दशमलव अंश के नौ (9) अंकों तक)।

Instant instant = Instant.now();

ZonedDateTime

किसी विशेष क्षेत्र के वॉल-घड़ी समय के लेंस के माध्यम से उसी एक साथ पल को देखने के लिए, ZoneId प्राप्त करने के लिए एक समय क्षेत्र ( ZoneId ) ZonedDateTime

समय क्षेत्र

continent/region , जैसे America/Montreal , Africa/Casablanca , या Pacific/Auckland के प्रारूप में उचित समय क्षेत्र का नाम निर्दिष्ट करें। EST या IST जैसे 3-4 अक्षर संक्षेप का कभी भी उपयोग न करें क्योंकि वे सही समय क्षेत्र नहीं हैं, मानकीकृत नहीं हैं, और यहां तक ​​कि अनूठा (!) भी नहीं।

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone();

ओफ़्सेट

एक समय क्षेत्र एक offset-from-UTC ऑफ offset-from-UTC में परिवर्तन का इतिहास है। लेकिन कभी-कभी आपको पूर्ण क्षेत्र के बिना केवल ऑफसेट दिया जाता है। उस स्थिति में, OffsetDateTime क्लास का उपयोग करें।

ZoneOffset offset = ZoneOffset.parse( "+05:30" );
OffsetDateTime odt = instant.atOffset( offset );

एक समय क्षेत्र का उपयोग केवल ऑफसेट के उपयोग पर बेहतर है।

LocalDateTime

स्थानीय में "स्थानीय" Local… कक्षाओं का अर्थ किसी भी इलाके का है, न कि एक विशेष इलाके। तो नाम काउंटर-सहज हो सकता है।

LocalDateTime , LocalDate , और LocalTime जानबूझकर ऑफ़सेट या समय क्षेत्र के बारे में कोई जानकारी नहीं है। इसलिए वे वास्तविक क्षणों का प्रतिनिधित्व नहीं करते हैं, वे समयरेखा पर अंक नहीं हैं। जब संदेह या भ्रम में, ZonedDateTime बजाय ZonedDateTime उपयोग करें। अधिक चर्चा के लिए खोज स्टैक ओवरफ़्लो खोजें।

स्ट्रिंग्स

डेट-टाइम ऑब्जेक्ट्स को स्ट्रिंग्स के साथ विवादित न करें जो उनके मूल्य का प्रतिनिधित्व करते हैं। आप डेट-टाइम ऑब्जेक्ट प्राप्त करने के लिए स्ट्रिंग को पार्स कर सकते हैं, और आप डेट-टाइम ऑब्जेक्ट से स्ट्रिंग जेनरेट कर सकते हैं। लेकिन स्ट्रिंग कभी भी डेट-टाइम नहीं है।

मानक आईएसओ 8601 स्वरूपों के बारे में जानें, जो जावा.टाइम कक्षाओं में डिफ़ॉल्ट रूप से उपयोग किए जाते हैं।

जावा के बारे में

java.time फ्रेमवर्क जावा 8 और बाद में बनाया गया है। ये कक्षाएं परेशानी पुरानी legacy दिनांक-समय कक्षाओं जैसे java.util.Date , Calendar , और SimpleDateFormat

Joda-Time प्रोजेक्ट, अब रखरखाव मोड में , java.time कक्षाओं में माइग्रेशन की सलाह देता है।

अधिक जानने के लिए, ओरेकल ट्यूटोरियल देखें। और कई उदाहरणों और स्पष्टीकरणों के लिए स्टैक ओवरफ़्लो खोजें। विशिष्टता JSR-310

जेडीबीसी 4.2 या उसके बाद के संस्करण के साथ एक जेडीबीसी ड्राइवर का अनुपालन करते हुए, आप java.time ऑब्जेक्ट्स को सीधे अपने डेटाबेस के साथ बदल सकते हैं। तारों की कोई ज़रूरत नहीं है और न ही java.sql। * कक्षाएं।

जावा.टाइम कक्षाएं कहां प्राप्त करें?

  • जावा एसई 8 , जावा एसई 9 , और बाद में
    • निर्मित।
    • एक बंडल कार्यान्वयन के साथ मानक जावा एपीआई का हिस्सा।
    • जावा 9 कुछ मामूली विशेषताओं और फिक्सेस जोड़ता है।
  • जावा एसई 6 और जावा एसई 7
    • जावाटाइम की अधिकांश कार्यक्षमता को ThreeTen-Backport में जावा 6 और 7 में बैक-पोर्ट किया गया है।
  • Android
    • जावा.टाइम कक्षाओं के एंड्रॉइड बंडल कार्यान्वयन के बाद के संस्करण।
    • पहले एंड्रॉइड के लिए, ThreeTenABP प्रोजेक्ट थ्रीटेन-बैकपोर्ट (ऊपर उल्लिखित) को अपनाने वाला है । देखें थ्रीटेबैप का उपयोग कैसे करें ...।

ThreeTen-Extra प्रोजेक्ट अतिरिक्त कक्षाओं के साथ जावा.टाइम बढ़ाता है। यह परियोजना java.time के संभावित भविष्य के जोड़ों के लिए एक सिद्ध भूमि है। आपको यहां कुछ उपयोगी कक्षाएं मिल सकती हैं जैसे Interval , YearWeek , YearQuarter , more





java eclipse calendar google-calendar