6

我的应用程序在模拟器上运行良好。所以我决定在我的安卓手机上运行我的应用程序。我正在尝试使用我的应用程序登录 Facebook 帐户,它在模拟器上运行良好。一旦我在安卓手机上运行我的应用程序,我总是会得到这个异常 -

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 帐户登录,我需要转到另一个 Intent(在模拟器中运行良好)但是一旦我在 android 手机中安装了这个应用程序,我总是会Login failed尽快当应用程序启动时,我什至没有在 facebook 登录页面上提供用户名和密码,而且我得到了上述异常。

还有谁能让我知道我的逻辑是否正确updateView method-我想做的是,只要 Facebook 身份验证正确意味着我可以登录,那么我需要转到另一个 Intent。

任何人都可以在这里帮助我,为什么会发生这种情况?

4

1 回答 1

0

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

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

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

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

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

  1. 验证设备上安装了适用于 Android 的原生 Facebook 应用程序。

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

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

  4. 启动 HelloFacebookSample。

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

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

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

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

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

于 2015-02-27T19:40:15.787 回答