0

我的Facebook登录活动是否有帮助:Facebook个人资料的getName()在Android上始终返回null

public class LoginActivity extends AppCompatActivity { 
    private LoginButton loginButton; 
    private CallbackManager callbackManager; 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     callbackManager = CallbackManager.Factory.create(); 
     setContentView(R.layout.activity_login); 
     loginButton = (LoginButton) findViewById(R.id.login_button); 
     loginButton.setReadPermissions("public_profile", "user_friends"); 
     final Intent myIntent = new Intent(this, MapsActivity.class); 
     if (isLoggedIn()) { 
      startActivity(myIntent); 
      finish(); 
      return; 
     } 
     loginButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(final View v) { 
       // Callback registration 
       loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
        @Override 
        public void onSuccess(LoginResult loginResult) { 
         LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this, Arrays.asList("public_profile", "user_friends")); 
         startActivity(myIntent); 
         finish(); 
        } 

        @Override 
        public void onCancel() { 
        } 

        @Override 
        public void onError(FacebookException exception) { 
        } 
       }); 
      } 
     }); 

    } 

    private boolean isLoggedIn() { 
     AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
     return accessToken != null; 
    } 
} 

和代码我使用试图从他们的ID得到别人的名字:

new Profile(creatorId, null, null, null, null, null).getFirstName() 

我已经尝试了此处显示的getFirstName()调用,除了getName()并且两者总是返回null。我认为如果他们在通过Facebook登录时授权我的应用程序,在我所请求的Facebook权限中拥有“public_profile”将允许我以这种方式获取某人的姓名。然而,我并不总是在我所要求的Facebook权限中拥有“public_profile”,但我已经强制所有用户通过Facebook重新登录到我的应用程序中,使用当前的代码和权限,所以我认为这可以解决这个问题。尽管如此,这个函数仍然返回null,我不知道为什么。

另外,creatorId可能是与当前登录的FB用户不同的用户的FB ID。(他们将授权+使用过去的应用程序,而不是该Android设备上当前登录的用户)。

回答

0

因此,即使对于公开的个人资料信息,图表请求似乎也是必需的。这里是图形请求我用了一定的Facebook ID获得头名,的CreatorID:

GraphRequest request = GraphRequest.newGraphPathRequest(
      AccessToken.getCurrentAccessToken(), 
      creatorId, 
      new GraphRequest.Callback() { 
       @Override 
       public void onCompleted(GraphResponse response) { 
        try { 
         Log.e("creatorId's first name:", response.getJSONObject().getString("first_name")); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }); 
    Bundle params = new Bundle(); 
    params.putString("fields", "id,first_name"); 
    request.setParameters(params); 
    request.executeAsync(); 
0

您可以使用此代码。 请改变你的GraphRequest.GraphJSONObjectCallback()接口

GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(),         
new GraphRequest.GraphJSONObjectCallback() { 

           @Override 
           public void onCompleted(JSONObject user, GraphResponse graphResponse) { 
            try { 
                        Log.e(TAG,"id"+user.optString("id"));            
             Log.e(TAG,"id"+user.optString("first_name")); 


            } catch (Exception e) { 
             e.printStackTrace(); 
            } 
           } 
          }); 
        Bundle parameters = new Bundle(); 
        parameters.putString("fields", "id,first_name"); 
        request.setParameters(parameters); 
        request.executeAsync();` 
相关问题