繁体   English   中英

Facebook集成登录只能在Android上运行一次

[英]Facebook integration login working just once android

我正在为我的应用程序使用Facebook集成,我从一个教程中学到了这一点,并且成功了,我可以成功登录,但是当我单击注销并想再次登录时,它会强制关闭程序并在logcat中生成错误。 这是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)

这是我的课,请有人帮助我真的需要你的帮助

 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);
}

}
}

我的猜测是在将片段从视图中分离之后,将调用您的跟踪器回调之一。 因此,getActivity()返回null,并且homeFragment()方法中发生NullPointerException。 您应该在onPause()中注销回调,然后在onResume()中再次注册,或者检查getActivity()是否返回null。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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