3

ユーザーの詳細にアクセスしようとすると、次のエラーが発生します。

07-29 14:49:47.343: W/System.err(2745): org.json.JSONException: No value for email
07-29 14:49:47.353: W/System.err(2745):     at org.json.JSONObject.get(JSONObject.java:354)
07-29 14:49:47.374: W/System.err(2745):     at org.json.JSONObject.getString(JSONObject.java:510)
07-29 14:49:47.374: W/System.err(2745):     at com.example.healthcity.common.FacebookContainer$3$1.onCompleted(FacebookContainer.java:237)
07-29 14:49:47.409: W/System.err(2745):     at com.facebook.Request$1.onCompleted(Request.java:264)
07-29 14:49:47.413: W/System.err(2745):     at com.facebook.Request$4.run(Request.java:1240)
07-29 14:49:47.423: W/System.err(2745):     at android.os.Handler.handleCallback(Handler.java:725)
07-29 14:49:47.423: W/System.err(2745):     at android.os.Handler.dispatchMessage(Handler.java:92)
07-29 14:49:47.433: W/System.err(2745):     at android.os.Looper.loop(Looper.java:137)
07-29 14:49:47.444: W/System.err(2745):     at android.app.ActivityThread.main(ActivityThread.java:5041)
07-29 14:49:47.444: W/System.err(2745):     at java.lang.reflect.Method.invokeNative(Native Method)
07-29 14:49:47.463: W/System.err(2745):     at java.lang.reflect.Method.invoke(Method.java:511)
07-29 14:49:47.463: W/System.err(2745):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-29 14:49:47.485: W/System.err(2745):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-29 14:49:47.493: W/System.err(2745):     at dalvik.system.NativeStart.main(Native Method)

コールバック メソッドでブレークポイントをキャプチャできません。このエラーが発生した場合は、助けてください。

以下は、ユーザーの詳細を取得するための私のコードです。

private void onSessionStateChange(Session session, SessionState state, Exception exception) {
    //RFR//_("onSessionStateChange----------------");
   /////////////// super.onSessionStateChange(state, exception);
    if (state.isOpened()) {
        readUserInfo(session);
    } else if (state.isClosed()) {
        // Session closed
    }
}

private Request.GraphUserCallback graphCallback = new Request.GraphUserCallback() {

      // callback after Graph API response with user object
      @Override
      public void onCompleted(GraphUser user, Response response) {
          String name = user.getName();
          String gender = (String) user.getProperty("gender");
          String email = (String) user.getProperty("email");
          String birthday = user.getBirthday();
          Log.d("FB----->","name: "+ name +" gender: "+ gender +" email: "+ email +" birthday: " +birthday);

      }

};

    public void readUserInfo(Session session){
        // make request to the /me API
        Request.executeMeRequestAsync(session, graphCallback);
    }

以下は、私が設定した許可です。

openRequest.setPermissions(Arrays.asList("user_birthday", "email", "user_location"));

ブラウザからチェックしたときに、グラフAPIから取得した応答は次のとおりです。

{
  "id": "1000000XXXXX930",
  "name": "First Last",
  "first_name": "First",
  "last_name": "Last",
  "link": "http://www.facebook.com/<myusername>",
  "username": "<myusername>",
  "gender": "male",
  "locale": "en_US"
}
4

6 に答える 6

1

Facebook アプリケーションにユーザーの電子メール ID へのアクセスを要求する「電子メール」許可を与えていますか?

API を使用して Facebook ユーザーの電子メール ID にアクセスする場合は、電子メールの許可を与える必要があります。ユーザー プロフィールに関する一般的な情報では、Facebook ユーザーのメール アドレスはわかりません。

Facebook API でのメールのアクセス許可

注:一部のユーザーは、電子メール アドレスを他のユーザーと共有しないようにセキュリティを設定し、電子メール アドレスを取得できない場合もあります。

それがあなたを助けることを願っています。

于 2013-07-29T09:29:26.103 に答える
0

メールの値を取得するには、これを試してください 編集済み:デフォルトでは、メールは取得されません。

Session.StatusCallback statusCallback = new Session.StatusCallback() 
        {

            @Override
            public void call(Session session, SessionState state, Exception exception) 
            {
                if(session.isOpened())
                {
                    Request.executeMeRequestAsync(session, new Request.GraphUserCallback() 
                    {

                        @Override
                        public void onCompleted(GraphUser user, Response response) 
                        {

                            if(user != null)
                            {
                                try
                                {
                                    System.out.println("Graph Inner Json"+user.getInnerJSONObject());
                                    String email = user.getInnerJSONObject().getString("email");
                                }
                             }
                         }
                     }
                 }
            }

YourActivityName.openActiveSession(this, true, statusCallback);

ここでopenActiveSession()権限を指定します

private static Session openActiveSession(Activity activity, boolean allowLoginUI, Session.StatusCallback statusCallback)
    {
        OpenRequest openRequest = new OpenRequest(activity);
        openRequest.setPermissions(Arrays.asList("user_birthday", "email"));
        openRequest.setCallback(statusCallback);

        Session session = new Session.Builder(activity).build();

        if(SessionState.CREATED_TOKEN_LOADED.equals(session.getState()) || allowLoginUI)
        {
            Session.setActiveSession(session);
            session.openForRead(openRequest);

            return session;
        }

        return null;
    }

onActivityResultそして最後に、メソッドで次のようにする必要があります。

if(Session.getActiveSession() != null)
        {
            Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
        }
于 2013-11-05T11:39:13.763 に答える
0

誰かの電子メールを取得するには許可が必要ですが、この明示的な許可なしに電子メールを取得できるようにプライバシーを設定している人もいますが、ほとんどの人はそうではありません.

于 2013-07-29T09:29:54.837 に答える