Java 如何使用谷歌日历api添加日历?
你好 如何使用google calendar api插入新日历 我尝试了以下代码并使用新的Retrievetask()执行。execute()Java 如何使用谷歌日历api添加日历?,java,android,android-asynctask,android-calendar,Java,Android,Android Asynctask,Android Calendar,你好 如何使用google calendar api插入新日历 我尝试了以下代码并使用新的Retrievetask()执行。execute() 类检索任务扩展了异步任务{ 私人例外; @凌驾 受保护的空位背景(空位…空位){ 试一试{ HttpTransport HTTP_TRANSPORT=AndroidHttp.newCompatibleTransport(); FileDataStoreFactory DATA\u STORE\u FACTORY=newfiledatastorefacto
类检索任务扩展了异步任务{
私人例外;
@凌驾
受保护的空位背景(空位…空位){
试一试{
HttpTransport HTTP_TRANSPORT=AndroidHttp.newCompatibleTransport();
FileDataStoreFactory DATA\u STORE\u FACTORY=newfiledatastorefactory(新文件(CalendarActivity.this.getFilesDir(),“.credentials/calendarJava快速启动”);
列出范围=
Arrays.asList(CalendarScopes.CALENDAR);
JsonFactory JSON_工厂=
JacksonFactory.getDefaultInstance();
输入流输入=
Events.class.getResourceAsStream(“/client_id.json”);
谷歌客户机密=
load(JSON_工厂,新的InputStreamReader(in));
//生成流并触发用户授权请求。
GoogleAuthorizationCodeFlow=
新的GoogleAuthorizationCodeFlow.Builder(
HTTP_传输、JSON_工厂、客户端机密、作用域)
.setDataStoreFactory(数据存储工厂)
.setAccessType(“在线”)
.build();
凭证凭证=新授权代码已安装App(
流,新的LocalServerReceiver())。授权(“用户”);
HttpTransport-transport=AndroidHttp.newCompatibleTransport();
JsonFactory JsonFactory=JacksonFactory.getDefaultInstance();
com.google.api.services.calendar.calendar服务=新建com.google.api.services.calendar.calendar.Builder(
运输、jsonFactory、凭证)
.setApplicationName(“kalender”)
.build();
com.google.api.services.calendar.model.calendar cal=new com.google.api.services.calendar.model.calendar();
cal.setSummary(“test123”);
service.calendars().insert(cal);
}捕获(例外e){
System.out.println(“测试失败”);
e、 printStackTrace();
}
返回null;
}
}
但我发现应用程序崩溃了,出现了以下错误(见下文)
当我尝试不使用Asynctask时,会得到android.os.NetworkOnMainThreadException
我做错了什么
08-23 14:17:13.926 16556-16675/de.ubik.kalender E/AndroidRuntime:
致命异常:异步任务#2
工艺流程:de.ubik.kalender,PID:16556
java.lang.RuntimeException:执行时出错
doInBackground()
在android.os.AsyncTask$3.done(AsyncTask.java:318)
在
java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
位于java.util.concurrent.FutureTask.setException(FutureTask.java:223)
位于java.util.concurrent.FutureTask.run(FutureTask.java:242)
在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
在
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
在
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
运行(Thread.java:761)
原因:java.lang.NoClassDefFoundError:解析失败:
Ljava/awt/Desktop;
在
com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp.browse(AuthorizationCodeInstalledApp.java:127)
在
com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp.onAuthorization(AuthorizationCodeInstalledApp.java:111)
在
com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp.authorization(AuthorizationCodeInstalledApp.java:79)
在
CalendarActivity$RetrieveFeedTask.doInBackground(CalendarActivity.java:199)
在
CalendarActivity$RetrieveFeedTask.doInBackground(CalendarActivity.java:171)
位于android.os.AsyncTask$2.call(AsyncTask.java:304)
位于java.util.concurrent.FutureTask.run(FutureTask.java:237)
在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
在
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
在
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
运行(Thread.java:761)
class RetrieveTask extends AsyncTask<Void, Void, Void> {
private Exception exception;
@Override
protected Void doInBackground(Void... voids) {
try {
HttpTransport HTTP_TRANSPORT = AndroidHttp.newCompatibleTransport();
FileDataStoreFactory DATA_STORE_FACTORY = new FileDataStoreFactory(new File(CalendarActivity.this.getFilesDir(), ".credentials/calendar-java-quickstart"));
List<String> SCOPES =
Arrays.asList(CalendarScopes.CALENDAR);
JsonFactory JSON_FACTORY =
JacksonFactory.getDefaultInstance();
InputStream in =
Events.class.getResourceAsStream("/client_id.json");
GoogleClientSecrets clientSecrets =
GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow =
new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(DATA_STORE_FACTORY)
.setAccessType("online")
.build();
Credential credential = new AuthorizationCodeInstalledApp(
flow, new LocalServerReceiver()).authorize("user");
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, credential)
.setApplicationName("kalender")
.build();
com.google.api.services.calendar.model.Calendar cal = new com.google.api.services.calendar.model.Calendar();
cal.setSummary("test123");
service.calendars().insert(cal);
} catch(Exception e) {
System.out.println("test failed");
e.printStackTrace();
}
return null;
}
}