java.lang.RuntimeException:使用Facebook登录时传递结果ResultInfo失败

java.lang.RuntimeException:使用Facebook登录时传递结果ResultInfo失败,java,android,nullpointerexception,facebook-authentication,facebook-android-sdk,Java,Android,Nullpointerexception,Facebook Authentication,Facebook Android Sdk,我的应用程序在emulator上运行良好。所以我决定在我的Android手机上运行我的应用程序。我正在尝试使用我的应用程序登录Facebook帐户,它在emulator上运行良好。当我在android手机上运行我的应用程序时,我总是会遇到这个异常- 01-30 11:06:08.400: E/AndroidRuntime(7463): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, reques

我的应用程序在emulator上运行良好。所以我决定在我的Android手机上运行我的应用程序。我正在尝试使用我的应用程序登录Facebook帐户,它在emulator上运行良好。当我在android手机上运行我的应用程序时,我总是会遇到这个异常-

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
下面是我的代码-

 @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()) {

        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();
    }
    }
我正在做的是-一旦我使用Facebook帐户登录,我需要转到另一个意图(在emulator中工作正常),但一旦我在android手机上安装了这个应用程序,我总是在应用程序启动后立即得到
登录失败
,即使我没有在facebook登录页面上提供用户名和密码,我也会得到上述异常

还有谁能让我知道我的逻辑在
updateView方法中正确与否?我想做的是,只要Facebook身份验证正确就意味着我可以登录,然后我需要转到另一个目的地

有人能帮我解释为什么会发生这种事吗?

告诉你@Matt Accola。 那一页说:

当Android系统设置中的“不保留活动”开发者选项打开时,Facebook SSO登录过程中断。LoginActivity会重复调用,并且每次LoginActivity的实例泄漏时都会调用。登录从未真正完成,最终需要终止该过程

请注意,如果关闭“不保留活动”设置,则此错误不可重现

请注意,只有当所有用户帐户都从本机Facebook应用程序注销时,此错误才会重现

复制步骤: 1.在设备上的Android开发者选项(设置下)中启用“不保留活动”设置

  • 验证设备上是否安装了Android本机Facebook应用程序

  • 确保所有用户帐户都已从本机Facebook应用程序注销

  • 下载Facebook SDK for Android源代码和示例,并将项目导入Eclipse

  • 启动HelloFacebookSample

  • 点击登录按钮。应显示Facebook登录屏幕

  • 输入Facebook凭据并点击登录按钮。等待一段时间后,可能会出现“身份验证”对话框

  • 单击“身份验证”对话框上的“确定”

  • 预期行为: 登录过程应完成,HelloFacebookSample屏幕应以登录状态显示

    实际行为:
    Facebook屏幕与进度对话框保持可见。由于内存不足,整个系统的运行速度减慢,最终进程开始崩溃。在这个过程中,我捕获了一个堆转储,可以看到许多LoginActivity实例被泄漏。此外,启用StrictMode将显示消息,说明LoginActivity实例正在泄漏。

    具有相同的崩溃,但情况不同。我唯一一次能够创建它是当Facebook身份验证过程导致Facebook Android应用程序没有响应时。如果用户单击“强制退出”或任何它抛出的命令。可能会有更多的例子发生,但这是我见过的唯一一个。还没有解决方案。您是否偶然打开了“不保留活动”开发人员选项?使用此设置时会出现问题,即使关闭了“不保留活动”选项,仍然会发生这种情况