Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用谷歌日历api添加日历?_Java_Android_Android Asynctask_Android Calendar - Fatal编程技术网

Java 如何使用谷歌日历api添加日历?

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

你好

如何使用google calendar api插入新日历

我尝试了以下代码并使用新的Retrievetask()执行。execute()

类检索任务扩展了异步任务{
私人例外;
@凌驾
受保护的空位背景(空位…空位){
试一试{
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;
    }
}