2

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

メールアドレスを取得するためのコードは次のとおりです。もっと簡単な方法があれば、それも素晴らしいでしょう。ありがとう :)。

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();
4

2 に答える 2

1

私が抱えていた問題は、ContactService への GET クエリに「ノンス」や「タイムスタンプ」などの特定の項目を含めるのを忘れていたことだと思います。http://androidwarzone.blogspot.com/2011/07/android-oauth-full-example-with-source.htmlでオンラインで有効なソリューションを見つけました。これが将来誰かを助けることができることを願っています。

于 2013-07-02T01:56:47.330 に答える
0

oauthParameters...のプロパティを使用する前に、if条件が であるかどうかを確認してくださいnull

特にこの声明の前に:

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

clientこれが正しいかどうかを確認nullします:

ContactFeed resultFeed = client.getFeed(feedUrl, ContactFeed.class);
于 2013-07-01T04:31:29.640 に答える