У меня проблема: когда я пытаюсь выполнить метод Profile.getprofile (), он возвращает мне значение null даже при использовании ProfileTracker.

Вот мой код:

 public class Login extends Activity implements OnClickListener,ConnectionCallbacks, OnConnectionFailedListener {




//TODO Facebook
ProfileTracker mProfileTracker;
private CallbackManager callbackManager;
final List<String> permisos = new ArrayList<String>();
private FacebookCallback<LoginResult> fb = new FacebookCallback<LoginResult>() {


    @Override
    public void onSuccess(LoginResult loginResult) {
        // App code
        mProfileTracker = new ProfileTracker() {
            @Override
            protected void onCurrentProfileChanged(Profile profile, Profile profile2) {

            }
        };
        mProfileTracker.startTracking();
        AccessToken token = loginResult.getAccessToken();
        Profile user = Profile.getCurrentProfile();
        String name = user.getName();
        Toast.makeText(Login.this, "Connected "+name , Toast.LENGTH_LONG).show();

    }
    @Override
    public void onCancel() {
        // App code

    }

    @Override
    public void onError(FacebookException exception) {
        // App code

    }
};

Мой onCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {

    FacebookSdk.sdkInitialize(getApplicationContext());
    callbackManager = CallbackManager.Factory.create();
    setContentView(R.layout.init_login);

    imgFacebook = (ImageView) findViewById(R.id.login_img_facebook);
    imgFacebook.setOnClickListener(this);
    permisos.add("user_friends");
    permisos.add("public_profile");
    LoginManager.getInstance().setLoginBehavior(LoginBehavior.SUPPRESS_SSO);
    LoginManager.getInstance().registerCallback(callbackManager, fb);
}

Мой onClick:

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.login_img_facebook:
        LoginManager.getInstance().logInWithReadPermissions(this,permisos);
        break;
    }
}

Мой onActivityResult:

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

Я добавляю это в свой манифест:

   <meta-data android:name="com.facebook.sdk.ApplicationId"
          android:value="@string/facebook_app_id"/>
    <activity android:name="com.facebook.FacebookActivity"
             android:label="@string/app_name"
             android:theme="@android:style/Theme.Translucent.NoTitleBar"/>

Кстати, я использую eclipse вместо Android Studio

0
Fran 20 Май 2015 в 14:41

1 ответ

Лучший ответ

Неправильное размещение кода

AccessToken token = loginResult.getAccessToken();
Profile user = Profile.getCurrentProfile();
String name = user.getName();
Toast.makeText(Login.this, "Connected "+name , Toast.LENGTH_LONG).show();

Вышеупомянутый код должен быть помещен внутри функции трекера.

mProfileTracker = new ProfileTracker() {
    @Override
    protected void onCurrentProfileChanged(Profile profile, Profile profile2) {
        // Place above code here...
    }
};
0
Ankit Bansal 20 Май 2015 в 15:24
Спасибо! это сработало для меня, но теперь у меня есть еще одно сомнение ... в первый раз, когда я вхожу в систему, он работает нормально, но после первого раза он не показывает мне тост :(
 – 
Fran
21 Май 2015 в 10:36
Может быть, из-за того, что ваш ProfileTracker активирован только в onSuccess() методе FacebookCallback, который, как мне кажется, не вызывается .. Или, может быть, профиль даже не изменился как вы уже вошли в систему ... попробуйте получить его напрямую ...
 – 
Ankit Bansal
21 Май 2015 в 13:11