2016-07-25 105 views
0

我尝试使用Gmail API和我遇到的这个运行时异常:java.lang.NoClassDefFoundError:在JDK的Java/AWT /桌面1.7

java.lang.NoClassDefFoundError: java/awt/Desktop 

它发生在这里(最后一行) :

InputStream stream = ReadMail.class.getResourceAsStream("/client_secret.json"); 
    Reader clientSecretReader = new InputStreamReader(stream); 
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(ReadMail.JSON_FACTORY, clientSecretReader); 

    GoogleAuthorizationCodeFlow flow = 
      new GoogleAuthorizationCodeFlow.Builder(
        ReadMail.HTTP_TRANSPORT, ReadMail.JSON_FACTORY, clientSecrets, ReadMail.SCOPES) 
        .setDataStoreFactory(ReadMail.DATA_STORE_FACTORY) 
        .setAccessType("offline") 
        .build(); 


    AuthorizationCodeInstalledApp authCodeInstalledApp = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()); 
    Credential credential = authCodeInstalledApp.authorize("user"); 

此代码是坐在AsyncTaskdoInBackground()方法。

我检查了并且Android Studio配置为使用JDK 1.7。

为什么会发生这种情况,我该如何解决?

+0

这必须是一个类路径问题,您不在运行时包含一些在编译时可用的源代码。 –

+0

@MattClark他在Android上。 – chrylis

+0

你必须包含堆栈跟踪,而不仅仅是一行。我们需要知道触发问题的类别负载。 – chrylis

回答

0

Android不支持所有的JDK类,只有subsetjava.awt不是其中的一部分。因此无法找到java.awt.Desktop。看起来你根本没有使用正确的API。您应该改用Android Quickstart

+0

感谢您快速回答,我已经看到了Android快速入门页面,但我无法使用它,因为我为Android API 21开发它。而Android快速入门仅在API 23支持 –

+0

我已经搜索了一些Gmail API代码这有效,我发现这是:https://developers.google.com/gmail/api/quickstart/java 没想到一些java代码不能在Android中工作。你有任何解决方案如何使用Gmail的Android API 21而不是23? –

+0

@TalMantelmakher它声明* API 23或更高版本*的Android SDK包。这并不意味着只支持API级别23和更高版本。 – tynn