简体   繁体   中英

Facebook integration login working just once android

am using facebook integration for my application and I learned it from a tutorial and it was successful and I can login successfully but when I click logout and I want to login again it force closes the program and generates the errors in logcat. Here is the logcat :

    java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.app.FragmentManager android.support.v4.app.FragmentActivity.getSupportFragmentManager()' on a null object reference
    at naqibshayea.afghanbazaar.LoginFragment.homeFragment(LoginFragment.java:90)
    at naqibshayea.afghanbazaar.LoginFragment.access$000(LoginFragment.java:22)
    at naqibshayea.afghanbazaar.LoginFragment$3.onCurrentProfileChanged(LoginFragment.java:72)
    at com.facebook.ProfileTracker$ProfileBroadcastReceiver.onReceive(ProfileTracker.java:105)
    at android.support.v4.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:297)
    at android.support.v4.content.LocalBroadcastManager.access$000(LocalBroadcastManager.java:46)
    at android.support.v4.content.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:116)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:158)
    at android.app.ActivityThread.main(ActivityThread.java:7225)
    at java.lang.reflect.Method.invoke(Native Method)

and Here is my class please someone help I really need your help

 public class LoginFragment extends Fragment {

 private CallbackManager callbackManager = null;
 private AccessTokenTracker mtracker = null;
 private ProfileTracker mprofileTracker = null;

 public static final String PARCEL_KEY = "parcel_key";

private LoginButton loginButton;

FacebookCallback<LoginResult> callback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {

    Profile profile = Profile.getCurrentProfile();
    homeFragment(profile);
}

@Override
public void onCancel() {

}

@Override
public void onError(FacebookException error) {

}
};

 @Override
 public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

callbackManager = CallbackManager.Factory.create();


mtracker = new AccessTokenTracker()    {
    @Override
    protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {

        Log.v("AccessTokenTracker", "oldAccessToken=" + oldAccessToken + "||" + "CurrentAccessToken" + currentAccessToken);
    }
    };


mprofileTracker = new ProfileTracker() {
    @Override
    protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {

        Log.v("Session Tracker", "oldProfile=" + oldProfile + "||" + "currentProfile" + currentProfile);
        homeFragment(currentProfile);

    }
};

mtracker.startTracking();
mprofileTracker.startTracking();
 }


private void homeFragment(Profile profile) {

if (profile != null) {
    Bundle mBundle = new Bundle();
    mBundle.putParcelable(PARCEL_KEY, profile);
    HomeFragment hf = new HomeFragment();
    hf.setArguments(mBundle);

    FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager
            .beginTransaction();
    fragmentTransaction.replace(R.id.mainContainer, new HomeFragment());
    fragmentTransaction.commit();
}
}


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

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);

loginButton = (LoginButton) view.findViewById(R.id.login_button);
     loginButton.setReadPermissions("user_friends");
// If using in a fragment
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);
 }

@Override
public void onStop() {
super.onStop();
mtracker.stopTracking();
mprofileTracker.stopTracking();
}


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

@Override
public void onResume() {
super.onResume();

if (isLoggedIn()) {
       loginButton.setVisibility(View.INVISIBLE);
    Profile profile = Profile.getCurrentProfile();
    homeFragment(profile);
}

}
}

My guess is one of your tracker callbacks get called after the fragment is detached from the view. So getActivity() returns null and a NullPointerException occurs in homeFragment() method. You should deregister your callbacks in onPause() and register again in onResume() or check if getActivity() returns null.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM