我在尝试在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();
}
}
}