2013-10-18 115 views
3

我的Facebook洛设置我的应用程序中像下面,这个想法是登录,然后做一个GraphUserCallback所以我们可以得到使用信息,然后传递给我自己注册系统,以便可以为我的应用程序设置用户帐户。获取日期

Request.executeMeRequestAsync(session, 
       new Request.GraphUserCallback() { 

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

         if (dialog != null && dialog.isShowing()) { 
          dialog.dismiss(); 
         } 
         if (user != null) { 
          Map<String, Object> responseMap = new HashMap<String, Object>(); 
          GraphObject graphObject = response 
            .getGraphObject(); 
          responseMap = graphObject.asMap(); 
          Log.i("FbLogin", "Response Map KeySet - " 
            + responseMap.keySet()); 

          Session session = Session.getActiveSession(); 
          String email = null; 
          String token = null; 
          String username = null; 
          String gender = null; 
          String birthday = null; 
          if (responseMap.get("email") != null) { 
           email = responseMap.get("email").toString(); 
           username = responseMap.get("first_name").toString()+" "+responseMap.get("last_name").toString(); 
           gender = responseMap.get("gender").toString(); 
           token = session.getAccessToken(); 
           /*birthday = responseMap.get("user_birthday").toString(); 

           Context context = getApplicationContext(); 
           int duration = Toast.LENGTH_SHORT; 

           Toast toast = Toast.makeText(context, birthday, duration); 
           toast.show();*/ 

           Intent i = new Intent(LogIn.this, FbLogin2Activity.class); 
           i.putExtra("Email", email); 
           i.putExtra("Token", token); 
           i.putExtra("Username", username); 
           i.putExtra("Gender", gender); 
           startActivity(i); 
          } else { 
           // Clear all session info & ask user to 
           // login again 
           if (session != null) { 
            session.closeAndClearTokenInformation(); 
           } 
          } 
         } 
        } 
       }); 

当用户点击“登录”按钮:

fblogin.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       Session session = Session.getActiveSession(); 
       if (session == null) { 
        Session.openActiveSession(LogIn.this, true, 
          statusCallback); 
       } else if (!session.isOpened()) { 
        session.openForRead(new Session.OpenRequest(
          LogIn.this).setCallback(statusCallback) 
          .setPermissions(permissions) 
          ); 
       } 
       /*Intent i = new Intent(getApplicationContext(), FbLoginActivity.class); 
       startActivity(i);*/ 
      } 
     }); 

,我的权限是:

/***** FB Permissions *****/ 
permissions = new ArrayList<String>(); 
permissions.add("email"); 
permissions.add("user_birthday"); 
permissions.add("user_location"); 
/***** End FB Permissions *****/ 

的用户的电子邮件被退回,并然而作品无论是用户的电子邮件或位置在graphusecallback响应中。

不知道如果我已经发布所有需要的,所以让我知道,但我不明白为什么它没有返回的一切

回答

1

用户的生日将在birthday领域,用户的位置将在location字段(而不是user_birthdayuser_location)。所以

birthday = responseMap.get("birthday").toString(); 
location = responseMap.get("location").get("name").toString(); 

应该工作。 。

+0

'生日= responseMap.get( “生日”)的toString();'工作正常,但是'位置= responseMap.get( “位置”)获得( “名称”)的toString();'给出的方法得到(字符串)通过https://developers.facebook.com/docs/reference/api/user/(位置字段未定义Object类型 –

+0

把我的头不知道如何在位置得到的话,但顶部)它是一个包含名称和ID的对象。 –

+0

事实上,如果你只是做'responseMap.get(“位置”)的toString();'返回工作看起来像ID和名称的JSON,但它似乎认为'responseMap.get(“位置”)'只是返回一个字符串? –