Android Things和谷歌日历API

Android Things和谷歌日历API,android,google-calendar-api,android-things,Android,Google Calendar Api,Android Things,我试图在Android Things平台上获取用户的日历事件,发现以下教程展示了一种方法: 我已经从手机上的用户那里得到了授权码,并将其发送到Android Things设备。然后我必须在Android上完成OAuth流程,但这就是我遇到的问题。下面是我得到的错误: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.subs.projecthera/com.subs.projecthera.MainAc

我试图在Android Things平台上获取用户的日历事件,发现以下教程展示了一种方法:

我已经从手机上的用户那里得到了授权码,并将其发送到Android Things设备。然后我必须在Android上完成OAuth流程,但这就是我遇到的问题。下面是我得到的错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.subs.projecthera/com.subs.projecthera.MainActivity}: android.os.NetworkOnMainThreadException
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6494)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
 Caused by: android.os.NetworkOnMainThreadException
    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1450)
    at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:102)
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:90)
    at java.net.InetAddress.getAllByName(InetAddress.java:787)
    at com.android.okhttp.Dns$1.lookup(Dns.java:39)
    at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:175)
    at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:141)
    at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:83)
    at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:174)
    at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126)
    at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95)
    at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281)
    at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
    at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:258)
    at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
    at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(Unknown Source:0)
    at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:77)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:981)
    at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:283)
    at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeTokenRequest.execute(GoogleAuthorizationCodeTokenRequest.java:158)
    at com.subs.projecthera.Core.AuthHelper.<init>(AuthHelper.java:40)
    at com.subs.projecthera.MainActivity.onCreate(MainActivity.java:48)
    at android.app.Activity.performCreate(Activity.java:7010)
    at android.app.Activity.performCreate(Activity.java:7001)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
正在从我的MainActivity的onCreate方法调用代码

    AuthHelper AH = new AuthHelper(GoogleSignIn.getAuthCode(this));
    GoogleCalendarHelper GCH = new GoogleCalendarHelper();
我意识到我可能必须使用AsyncTask,但在这种情况下如何实现呢?这是获取日历事件信息的最佳方式,还是有更好的方式


谢谢

错误日志非常清楚:网络在主线程上

您正在主线程上执行日历请求,这是一个网络请求

您必须在后台这样做,一些常见的解决方案将是协同路由、RxJava、可调用/可运行、使用服务、手动管理线程,甚至异步任务(不推荐使用)

哪种解决方案真正取决于您,但在Android和Android上都禁止在UI线程上长时间运行操作

public GoogleCalendarHelper() {
    Calendar calendarAPIClient = new Calendar(new NetHttpTransport(), new JacksonFactory(), AuthHelper.mGoogleCredential);

    calendarAPIClient.events();

    Log.e("SOMETHING", "");
}
    AuthHelper AH = new AuthHelper(GoogleSignIn.getAuthCode(this));
    GoogleCalendarHelper GCH = new GoogleCalendarHelper();