2017-02-06 1 views
2

Я пытаюсь добавить новое событие в календарь с помощью своего приложения. Я использую следующий код:Ошибка при попытке добавить событие в календарь: имя не должно быть пустым

public void createEvent() { 
     String token = preferences.getString(Config.GOOGLE_TOKEN, ""); 
     m_credential = GoogleAccountCredential.usingOAuth2(this.getContext(), SCOPES); 
     m_credential.setSelectedAccountName(token); 
     HttpTransport transport = AndroidHttp.newCompatibleTransport(); 
     JsonFactory jsonFactory = JacksonFactory.getDefaultInstance(); 
     com.google.api.services.calendar.Calendar service = new com.google.api.services.calendar.Calendar.Builder(
       transport, jsonFactory, m_credential) 
       .setApplicationName("R_D_Location Callendar") 
       .build(); 


     Event event = new Event() 
       .setSummary("Event- April 2016") 
       .setLocation("Dhaka") 
       .setDescription("New Event 1"); 

     DateTime startDateTime = new DateTime("2017-02-26T18:10:00+06:00"); 
     EventDateTime start = new EventDateTime() 
       .setDateTime(startDateTime) 
       .setTimeZone("Asia/Dhaka"); 
     event.setStart(start); 

     DateTime endDateTime = new DateTime("2017-02-26T18:40:00+06:00"); 
     EventDateTime end = new EventDateTime() 
       .setDateTime(endDateTime) 
       .setTimeZone("Asia/Dhaka"); 
     event.setEnd(end); 

     String[] recurrence = new String[]{"RRULE:FREQ=DAILY;COUNT=2"}; 
     event.setRecurrence(Arrays.asList(recurrence)); 

     EventAttendee[] attendees = new EventAttendee[]{ 
       new EventAttendee().setEmail("[email protected]"), 
       new EventAttendee().setEmail("asd[email protected]"), 
     }; 
     event.setAttendees(Arrays.asList(attendees)); 

     EventReminder[] reminderOverrides = new EventReminder[]{ 
       new EventReminder().setMethod("email").setMinutes(24 * 60), 
       new EventReminder().setMethod("popup").setMinutes(10), 
     }; 
     Event.Reminders reminders = new Event.Reminders() 
       .setUseDefault(false) 
       .setOverrides(Arrays.asList(reminderOverrides)); 
     event.setReminders(reminders); 

     String calendarId = "primary"; 
     try { 
      event = service.events().insert(calendarId, event).execute(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     System.out.printf("Event created: %s\n", event.getHtmlLink()); 

    } 

Но в event = service.events().insert(calendarId, event).execute(); линии я адресности следующее сообщение об ошибке:

E/UncaughtException: java.lang.IllegalArgumentException: the name must not be empty: null 
                     at android.accounts.Account.<init>(Account.java:48) 
                     at com.google.android.gms.auth.zze.getToken(Unknown Source) 
                     at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 
                     at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(GoogleAccountCredential.java:269) 
                     at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:294) 
                     at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:868) 
                     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419) 
                     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) 
                     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469) 
                     at com.socialcar.booking_fragment.BookingOwnerDetailFragment.createEvent(BookingOwnerDetailFragment.java:456) 
                     at com.socialcar.booking_fragment.BookingOwnerDetailFragment.onClick(BookingOwnerDetailFragment.java:299) 
                     at android.view.View.performClick(View.java:4615) 
                     at android.view.View$PerformClick.run(View.java:18784) 
                     at android.os.Handler.handleCallback(Handler.java:733) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:136) 
                     at android.app.ActivityThread.main(ActivityThread.java:5061) 
                     at java.lang.reflect.Method.invokeNative(Native Method) 
                     at java.lang.reflect.Method.invoke(Method.java:515) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:603) 
                     at dalvik.system.NativeStart.main(Native Method) 

я проверил в других местах, чтобы найти решение, и ошибка, кажется, что-то не так с токен, но я получаю его, когда я вхожу в аккаунт Google. Поэтому я не знаю, почему у меня такая ошибка.

+0

Вы нашли решение? – Kaushal28

ответ

0

Сравнивая код с Calendar Android Quickstart, я думаю, что лучше, если вы сначала убедитесь, что учетные данные и авторизация были обработаны, прежде чем звонить на events().insert.

Вы можете увидеть в Android Quickstart, что getResultsFromApi() делает вызов chooseAccount() метод, который содержит

mCredential.setSelectedAccountName(accountName); 

линии, которые я думаю, это имя вашей ошибки ищет.

private void getResultsFromApi() { 
     if (! isGooglePlayServicesAvailable()) { 
      acquireGooglePlayServices(); 
     } else if (mCredential.getSelectedAccountName() == null) { 
      chooseAccount(); // <-- makes sure that your account name is verified first 
     } else if (! isDeviceOnline()) { 
      mOutputText.setText("No network connection available."); 
     } else { 
      new MakeRequestTask(mCredential).execute(); // <-- after authentication and authorization, you can now make a request to Calendar API 
     } 
    } 
Смежные вопросы