[英]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.