2013-07-01 1 views
2

Android 앱에서 Google 서비스 용 Oauth2를 구현하려고합니다. 사용자의 이메일 주소를 알아야합니다. 현재 내가 액세스 토큰과 토큰 비밀을 얻을 수 있지만, 나는 ContactService에서에서 사용자의 이메일 주소를 얻기 위해 다음을 사용하려고하면, 나는 다음과 같은 오류 얻을 : 여기 Android Google Oauth2 ContactService

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 

이메일 주소를 얻기위한 내 코드입니다 . 더 간단한 방법이 있다면, 그것은 또한 아주 좋을 것입니다. 감사 :). oauthParameters의 속성 중 하나를 사용하기 전에

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

google_api-java-client jars 대신 Android에서 gdata jars를 사용하고 있다는 문제가 있습니까? –

답변

0

... 그것은 null 인 경우 if 상태를 확인한다.

특히이 문 앞에 :

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

client이에 대한 null 있는지 확인 :

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

답변 주셔서 감사합니다,하지만 그건 나를 위해 작동하지 않았다. 나는 이들 중 하나가 null이면 com.example.GmailOauthActivity $ GmailEmailAddressTask에 오류가 발생하지만 Google API 클래스에서 오류가 발생한다고 생각합니다. –

+0

안녕하세요 @ 7bluephoenix, 이것은 나를 위해 작동하지만, 며칠 전부터 작동을 멈추었으며 이제는 com.google.android.gms.auth.GoogleAuthException : Unknown 오류가 발생합니다. 왜 그런가? 내 범위에 문제가 있습니까? https://gist.github.com/lawloretienne/7351151 – toobsco42