2016-01-25 2 views
1

IAM с помощью facebook SDK 4.0 не может войти в систему с Facebook в фрагменту вот мой кодIAM с помощью facebook SDK 4.0 не может войти в систему с Facebook в фрагменту

fbLoginButton.registerCallback (mCallbackManager, новый FacebookCallback < LoginResult>() {

 @Override 
     public void onSuccess(LoginResult loginResult) { 

      System.out.println("onSuccess"); 

      String accessToken = loginResult.getAccessToken() 
        .getToken(); 
      Log.d("accessToken", accessToken); 

      GraphRequest request = GraphRequest.newMeRequest(
        loginResult.getAccessToken(), 
        new GraphRequest.GraphJSONObjectCallback() { 
         @Override 
         public void onCompleted(JSONObject object, GraphResponse response) { 

          Log.d("LoginActivity", 
            response.toString()); 
          try { 
           String id = object.getString("id"); 
           try { 
            URL profile_pic = new URL(
              "http://graph.facebook.com/" + id + "/picture?type=large"); 
            Log.d("profile_pic", 
              profile_pic + ""); 

           } catch (MalformedURLException e) { 
            e.printStackTrace(); 
           } 
           String name = object.getString("name"); 
           String email = object.getString("email"); 
           String gender = object.getString("gender"); 
           String birthday = object.getString("birthday"); 
          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 
         } 
        }); 
      Bundle parameters = new Bundle(); 
      parameters.putString("fields", "id,name,email,gender, birthday"); 
      request.setParameters(parameters); 
      request.executeAsync(); 
     } 

     @Override 
     public void onCancel() { 
      Log.d("cancel", "onCancel"); 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      System.out.println("onError"); 
      Log.d("LoginActivity", exception.getCause().toString()); 
     } 
    }); 
} 

@Override 
public void onActivityResult(int requestCode, int responseCode, Intent data) { 
    super.onActivityResult(requestCode, responseCode, data); 
    mCallbackManager.onActivityResult(requestCode, responseCode, data); 

} 

Он никогда не приходит в onSucess или ошибки после входа в систему .it не меняет журнал в кнопку logout.what проблема есть другой способ, чтобы использовать его из фрагмента.

ответ

1
@Override 
public void onSuccess(LoginResult loginResult) { 
    AccessToken accessToken = loginResult.getAccessToken(); 
    Profile profile = Profile.getCurrentProfile(); 
    displayMessage(profile); 
} 

@Override 
public void onCancel() { 

} 

@Override 
public void onError(FacebookException e) { 

} 


public MainFragment() { 

} 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    FacebookSdk.sdkInitialize(getActivity().getApplicationContext()); 

    callbackManager = CallbackManager.Factory.create(); 

    accessTokenTracker = new AccessTokenTracker() { 
     @Override 
     protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) { 

     } 
    }; 

    profileTracker = new ProfileTracker() { 
     @Override 
     protected void onCurrentProfileChanged(Profile oldProfile, Profile newProfile) { 
      displayMessage(newProfile); 
     } 
    }; 

    accessTokenTracker.startTracking(); 
    profileTracker.startTracking(); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_main, container, false); 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    LoginButton loginButton = (LoginButton) view.findViewById(R.id.login_button); 
    textView = (TextView) view.findViewById(R.id.textView); 

    loginButton.setReadPermissions("user_friends"); 
    loginButton.setFragment(this); 
    loginButton.registerCallback(callbackManager, callback); 

} 

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

} 

private void displayMessage(Profile profile) { 
    if (profile != null) { 
     textView.setText(profile.getName()); 

    } 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    accessTokenTracker.stopTracking(); 
    profileTracker.stopTracking(); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    Profile profile = Profile.getCurrentProfile(); 
    displayMessage(profile); 
} 
+0

iam не получая код, вы могли бы написать полный код –

1

Сделать метод facebookLogIn() как:

public void facebookLogIn(){ 
    FacebookCallback<LoginResult> loginResultFacebookCallback = new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      AccessToken accessToken = loginResult.getAccessToken(); 
      Log.e("FB", String.valueOf(accessToken)); 
      Profile profile = Profile.getCurrentProfile(); 

      if (profile != null) { 
       // name.setText("Witam " + profile.getName()); 
       Toast.makeText(LogIn.this, profile.getFirstName(), Toast.LENGTH_SHORT).show(); 
       Log.e("FB", "w"); 
      } 
     } 
     @Override 
     public void onCancel() { 
      // App code 
     } 
     @Override 
     public void onError(FacebookException exception) { 
      // App code 
     } 
    }; 
    callbackManager = CallbackManager.Factory.create(); 
    LoginButton mBtnFacebook = (LoginButton) findViewById(R.id.login_button); 
    mBtnFacebook.setReadPermissions(Arrays.asList("public_profile", "user_friends")); 
    mBtnFacebook.registerCallback(callbackManager, loginResultFacebookCallback); 

} 

и этот метод вызывается из метода OnCreate().

Смежные вопросы