java.lang.RuntimeException:使用Facebook登录时未能提供结果ResultInfo

ars*_*nal 6 java android nullpointerexception facebook-authentication facebook-android-sdk

我的应用程序在模拟器上工作正常.所以我决定在我的Android手机上运行我的应用程序.我正在尝试使用我的应用程序登录Facebook帐户,它在模拟器上工作正常.一旦我在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
Run Code Online (Sandbox Code Playgroud)

以下是我的代码 -

 @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();
    }
    }
Run Code Online (Sandbox Code Playgroud)

我正在做的是 - 一旦我使用Facebook帐户登录,我需要转到另一个Intent(在模拟器中工作正常)但是只要我在Android手机中安装此应用程序,我总是Login failed尽快得到因为应用程序启动甚至我没有在Facebook登录页面上提供用户名和密码,我也得到了上述异常.

并且任何人都可以让我知道我的逻辑是否正确updateView method- 我想要做的是,一旦Facebook身份验证正确意味着我能够登录,那么我需要去另一个意图.

任何人都可以帮助我,为什么这件事情正在发生?

Ima*_*shi 0

坦克你@Matt Accola。该页面是这样说的:

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

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

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

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

  1. 验证设备上是否安装了适用于 Android 的本机 Facebook 应用程序。

  2. 确保所有用户帐户均已从本机 Facebook 应用程序注销。

  3. 下载适用于 Android 的 Facebook SDK 源代码和示例,并将项目导入到 Eclipse 中。

  4. 启动 HelloFacebookSample。

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

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

  7. 点击身份验证对话框上的确定。

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

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