2013-07-01 55 views
2

我想在我的Android应用程序中为谷歌服务实现Oauth2。我需要获取用户的电子邮件地址。目前我能获得访问令牌和令牌密钥,但是当我尝试使用这些来自的ContactService获取用户的电子邮件地址,我得到以下错误:Android谷歌Oauth2联系服务

Caused by: java.lang.NullPointerException 
    at com.google.gdata.client.authn.oauth.OAuthUtil.normalizeParameters(OAuthUtil.java:163) 
    at com.google.gdata.client.authn.oauth.OAuthUtil.getSignatureBaseString(OAuthUtil.java:81) 
    at com.google.gdata.client.authn.oauth.TwoLeggedOAuthHelper.addCommonRequestParameters(TwoLeggedOAuthHelper.java:79) 
    at com.google.gdata.client.authn.oauth.TwoLeggedOAuthHelper.addParametersAndRetrieveHeader(TwoLeggedOAuthHelper.java:121) 
    at com.google.gdata.client.authn.oauth.TwoLeggedOAuthHelper.getAuthorizationHeader(TwoLeggedOAuthHelper.java:112) 
    at com.google.gdata.client.GoogleAuthTokenFactory$OAuthToken.getAuthorizationHeader(GoogleAuthTokenFactory.java:204) 
    at com.google.gdata.client.http.HttpGDataRequest.<init>(HttpGDataRequest.java:331) 
    at com.google.gdata.client.http.GoogleGDataRequest.<init>(GoogleGDataRequest.java:456) 
    at com.google.gdata.client.http.GoogleGDataRequest$Factory.createRequest(GoogleGDataRequest.java:93) 
    at com.google.gdata.client.http.HttpGDataRequest$Factory.getRequest(HttpGDataRequest.java:165) 
    at com.google.gdata.client.Service.createRequest(Service.java:760) 
    at com.google.gdata.client.GoogleService.createRequest(GoogleService.java:525) 
    at com.google.gdata.client.Service.createFeedRequest(Service.java:1156) 
    at com.google.gdata.client.Service.getFeed(Service.java:997) 
    at com.google.gdata.client.GoogleService.getFeed(GoogleService.java:631) 
    at com.google.gdata.client.Service.getFeed(Service.java:1017) 
    at com.example.GmailOauthActivity$GmailEmailAddressTask.doInBackground(GmailOauthActivity.java:239) 
    at com.example.GmailOauthActivity$GmailEmailAddressTask.doInBackground(GmailOauthActivity.java:220) 
    at android.os.AsyncTask$2.call(AsyncTask.java:287) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
    ... 4 more 

这是我获得的电子邮件地址码。如果有一个更简单的方法,那么这也会很棒。谢谢 :)。

GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters(); 
      oauthParameters.setOAuthConsumerKey(CONSUMER_KEY); 
      oauthParameters.setOAuthConsumerSecret(consumer.getTokenSecret()); 
      oauthParameters.setScope(SCOPE); 
      oauthParameters.setOAuthVerifier(verifier); 
      oauthParameters.setOAuthToken(consumer.getToken()); 
      oauthParameters.setOAuthTokenSecret(consumer.getTokenSecret()); 
      ContactsService client=new ContactsService ("Service"); 
      client.setOAuthCredentials(oauthParameters, new OAuthHmacSha1Signer()); 
      oauthParameters.setOAuthType(OAuthParameters.OAuthType.TWO_LEGGED_OAUTH); 
      client.setHeader("Authorization", "Bearer " + consumer.getToken()); 
      URL feedUrl = new URL("https://www.google.com/m8/feeds/contacts/default/full"); 
      com.google.gdata.client.Query myQuery = new com.google.gdata.client.Query(feedUrl); 
      myQuery.setStartIndex(1); 
      myQuery.setMaxResults(1); 
      ContactFeed resultFeed = client.getFeed(feedUrl, ContactFeed.class); 
      return resultFeed.getAuthors().get(0).getEmail(); 
+0

是我在android上使用gdata jar而不是google_api-java-client jars的问题? –

回答

0

你之前使用任何oauthParameters属性...检查在if条件,如果它是null

特别是此语句前:

client.setOAuthCredentials(oauthParameters, new OAuthHmacSha1Signer()); 

,并检查是否clientnull此:

ContactFeed resultFeed = client.getFeed(feedUrl, ContactFeed.class); 
+0

感谢您的回答,但这对我无效。我认为,如果其中任何一个为空,那么我会在com.example.GmailOauthActivity $ GmailEmailAddressTask中发生错误,但我在google api类中收到错误。 –

+0

嘿@ 7bluephoenix,这用于为我工作,但只有几天前它停止工作,现在它引发此错误com.google.android.gms.auth.GoogleAuthException:未知。任何想法为什么?我的示波器有问题吗? https://gist.github.com/lawloretienne/7351151 – toobsco42