Facebook身份验证无法在Android手机上运行

时间:2013-01-31 02:59:49

标签: java android facebook-authentication facebook-android-sdk

我已经创建了一个Android应用程序,我需要使用Facebook登录,一旦身份验证成功,我需要转到另一个意图。所以我从here下载了Facebook Android SDK。

下载并导入eclipse后,我从该SDK扩展了SessionLoginExample。在我的模拟器中它对我来说工作正常,我可以使用它登录到Facebook应用程序,并且一旦我登录,它也会转到另一个Intent。

问题陈述: -

但是我在真正的Android手机上安装应用程序后出现问题。在Android手机上安装后,只要打开Facebook登录页面,在输入我的用户名和密码之后,它就不会出现另一个意图,过了一段时间我也会在我的控制台中出现异常。之后,每次收到消息Facebook has stopped working,然后我收到消息Application has forced closed

我注意到的另一件事是 - 一旦我在Android手机中打开我的应用程序,我总是在我的控制台中收到消息Login Failed,即使我已将用户名和密码输入到Facebook页面。

以下是我在SessionLoginExample -

中使用的代码
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment, container, false);

    buttonLoginLogout = (Button) view.findViewById(R.id.buttonLoginLogout);
    textInstructionsOrLink = (TextView) view.findViewById(R.id.instructionsOrLink);

    Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);

    Session session = Session.getActiveSession();
    if (session == null) {
        if (savedInstanceState != null) {
        session = Session.restoreSession(getActivity(), null, statusCallback,
            savedInstanceState);
        }
        if (session == null) {
        session = new Session(getActivity());
        }
        Session.setActiveSession(session);
        if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
        session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
        }
    }

    updateView();

    return view;
    }

    @Override
    public void onStart() {
    super.onStart();
    Session.getActiveSession().addCallback(statusCallback);
    }

    @Override
    public void onStop() {
    super.onStop();
    Session.getActiveSession().removeCallback(statusCallback);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(getActivity(), requestCode, resultCode, data);
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    Session session = Session.getActiveSession();
    Session.saveSession(session, outState);
    }

    private void updateView() {
    Session session = Session.getActiveSession();
    if (session.isOpened()) {

    // After login is successful, I am going to another Intent
        Intent thesisProject = new Intent(getActivity(), ThesisProjectAndroid.class);
        startActivity(thesisProject);

    } else {
        Log.d(TAG_LOGIN_FAILED,
            "There is something wrong with your Facebook account. Please try again.");

        textInstructionsOrLink.setText(R.string.instructions);
        buttonLoginLogout.setText(R.string.login);
        buttonLoginLogout.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            onClickLogin();
        }
        });
    }
    }



    private void onClickLogin() {
    Session session = Session.getActiveSession();
    if (!session.isOpened() && !session.isClosed()) {
        session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
    } else {
        Session.openActiveSession(getActivity(), this, true, statusCallback);
    }
    }

    private void onClickLogout() {
    Session session = Session.getActiveSession();
    if (!session.isClosed()) {
        session.closeAndClearTokenInformation();
    }
    }

    private class SessionStatusCallback implements Session.StatusCallback {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        updateView();
    }
    }
}

我也得到以下异常 -

01-30 11:06:08.400: E/AndroidRuntime(7463): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=64206, result=0, data=null} to activity {com.facebook.samples.sessionlogin/com.facebook.LoginActivity}: java.lang.NullPointerException

任何人都可以帮我解决这个问题,为什么会发生在我的手机上?

1 个答案:

答案 0 :(得分:3)

根据我的经验,您可以通过检查onActivityResult中的resultCode来解决您显示的异常,然后再将其传递给Session,例如:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (Session.getActiveSession() != null && resultCode == RESULT_OK) {
Session.getActiveSession().onActivityResult(getActivity(), requestCode, resultCode, data);
}
}

虽然您的facebook登录无法正常工作,但无法帮助解决原始问题。抱歉。