Google日历事件的java.lang.IllegalStateException

时间:2014-07-02 07:54:53

标签: android google-calendar-api

我在尝试在Google日历中创建一个事件时遇到以下错误。我想我需要一个异步任务,但我不知道该怎么做。我是Android的新手,对这个和新的很新对于android,我想知道是否有人可以帮助我。

堆栈追踪:

07-02 12:22:02.796: E/AndroidRuntime(16698): FATAL EXCEPTION: main
07-02 12:22:02.796: E/AndroidRuntime(16698): Process: com.google.api.services.samples.calendar.android, PID: 16698
07-02 12:22:02.796: E/AndroidRuntime(16698): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.google.api.services.samples.calendar.android/com.google.api.services.samples.calendar.android.InsertActivity}: java.lang.IllegalStateException: Calling this from your main thread can lead to deadlock
07-02 12:22:02.796: E/AndroidRuntime(16698):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
07-02 12:22:02.796: E/AndroidRuntime(16698):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
07-02 12:22:02.796: E/AndroidRuntime(16698):    at android.app.ActivityThread.access$800(ActivityThread.java:135)
07-02 12:22:02.796: E/AndroidRuntime(16698):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
07-02 12:22:02.796: E/AndroidRuntime(16698):    at android.os.Handler.dispatchMessage(Handler.java:102)
07-02 12:22:02.796: E/AndroidRuntime(16698):    at android.os.Looper.loop(Looper.java:136)
07-02 12:22:02.796: E/AndroidRuntime(16698):    at android.app.ActivityThread.main(ActivityThread.java:5001)
07-02 12:22:02.796: E/AndroidRuntime(16698):    at java.lang.reflect.Method.invokeNative(Native Method)
07-02 12:22:02.796: E/AndroidRuntime(16698):    at java.lang.reflect.Method.invoke(Method.java:515)
07-02 12:22:02.796: E/AndroidRuntime(16698):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
07-02 12:22:02.796: E/AndroidRuntime(16698):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
07-02 12:22:02.796: E/AndroidRuntime(16698):    at dalvik.system.NativeStart.main(Native Method)
07-02 12:22:02.796: E/AndroidRuntime(16698): Caused by: java.lang.IllegalStateException: Calling this from your main thread can lead to deadlock
ComponentInfo{com.google.api.services.samples.calendar.android/com.google.api.services.samples.calendar.android.InsertActivity}: java.lang.IllegalStateException: Calling this from your main thread can lead to dead

InsertActivity.java

public class InsertActivity extends Activity {

    com.google.api.services.calendar.Calendar client;
    final HttpTransport transport = AndroidHttp.newCompatibleTransport();

    final JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
    GoogleAccountCredential credential;
    private static final Level LOGGING_LEVEL = Level.OFF;

    private static final String PREF_ACCOUNT_NAME = "accountName";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        setContentView(R.layout.addevent);
        Logger.getLogger("com.google.api.client").setLevel(LOGGING_LEVEL);
        // Google Accounts
        credential =
                GoogleAccountCredential.usingOAuth2(this, Collections.singleton(CalendarScopes.CALENDAR));
        SharedPreferences settings = getPreferences(Context.MODE_PRIVATE);
        credential.setSelectedAccountName(settings.getString(PREF_ACCOUNT_NAME, null));
        // Calendar client
        client = new com.google.api.services.calendar.Calendar.Builder(
                transport, jsonFactory, credential).setApplicationName("Google-CalendarAndroidSample/1.0")
                .build();
        Calendar calendar = new Calendar();
        Intent intent = getIntent();
        String id = intent.getStringExtra("id");
        calendar.setSummary(intent.getStringExtra("summary"));
        Event event = new Event();
        calendar.setId(id);
        event.setSummary("Appointment");

        ArrayList<EventAttendee> attendees = new ArrayList<EventAttendee>();
        attendees.add(new EventAttendee().setEmail("sabeenpradhan@gmail.com"));
        // ...
        event.setAttendees(attendees);

        Date startDate = new Date();
        Date endDate = new Date(startDate.getTime() + 3600000);
        DateTime start = new DateTime(startDate, TimeZone.getTimeZone("UTC"));
        event.setStart(new EventDateTime().setDateTime(start));
        DateTime end = new DateTime(endDate, TimeZone.getTimeZone("UTC"));
        event.setEnd(new EventDateTime().setDateTime(end));
        System.out.print(startDate);
        try {
            client.events().insert(calendar.getId(), event).execute();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

0 个答案:

没有答案