java.lang.RuntimeException: Ошибка доставки результата ResultInfo при входе в систему с использованием Facebook

Мое приложение отлично работает на эмуляторе. Поэтому я решил запустить свое приложение на своем телефоне 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

Ниже мой код -

 @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, мне нужно перейти к другому намерению (которое отлично работает в эмуляторе), но как только я установил это приложение на телефон Android, я всегда получаю Login failed как как только приложение запускается, даже если я не указал имя пользователя и пароль на странице входа в facebook, я также получаю указанное выше исключение.

А также может ли кто-нибудь сообщить мне, что моя логика верна в updateView method или нет. Я хотел сделать следующее: как только проверка подлинности Facebook верна, я могу войти в систему, тогда мне нужно перейти к другому намерению.

Может ли кто-нибудь помочь мне здесь, почему это происходит?


comment
Такая же авария, но при других обстоятельствах. Единственный раз, когда мне удалось это создать, - это когда процесс аутентификации Facebook приводит к тому, что приложение Facebook Android не отвечает. Если пользователь нажимает Force Quit или что-то еще, это вызывает это. Может быть, таких случаев и больше, но я видел только один. Решения пока нет.   -  person JMRboosties    schedule 09.02.2013
comment
У вас случайно не включена опция Не оставлять действия разработчика? При использовании этого параметра возникают проблемы, developers.facebook.com/bugs/269489836511974   -  person Matt Accola    schedule 26.02.2013
comment
Даже если параметр «Не сохранять действия» отключен, это все равно происходит.   -  person vishal dharankar    schedule 16.05.2015


Ответы (1)


Танку тебе @ Мэтт Аккола. эта страница говорит это:

Когда в системных настройках Android включена опция разработчика «Не сохранять действия», процесс входа в систему единого входа в Facebook прерывается. LoginActivity вызывается повторно и каждый раз, когда происходит утечка экземпляра LoginActivity. На самом деле вход в систему никогда не завершается, и в конечном итоге процесс необходимо остановить.

Обратите внимание, что эта ошибка не воспроизводится, если параметр «Не сохранять действия» отключен.

Обратите внимание, что эта ошибка воспроизводится только в том случае, если все учетные записи пользователей вышли из собственного приложения Facebook.

Действия по воспроизведению: 1. Включите параметр «Не сохранять действия» в параметрах разработчика Android (в разделе «Настройки») на устройстве.

  1. Убедитесь, что на устройстве установлено собственное приложение Facebook для Android.

  2. Убедитесь, что все учетные записи пользователей вышли из собственного приложения Facebook.

  3. Загрузите исходный код и образцы Facebook SDK для Android и импортируйте проекты в Eclipse.

  4. Запустите HelloFacebookSample.

  5. Нажмите кнопку «Войти». Должен отобразиться экран входа в Facebook.

  6. Введите учетные данные Facebook и нажмите кнопку «Войти». Через некоторое время может появиться диалоговое окно авторизации.

  7. Нажмите ОК в диалоговом окне авторизации.

Ожидаемое поведение: процесс входа в систему должен завершиться, и экран HelloFacebookSample должен отображаться в состоянии входа в систему.

Фактическое поведение: экран Facebook остается видимым вместе с диалоговым окном выполнения. Вся система замедляется, и в конечном итоге процессы начинают давать сбой из-за нехватки памяти. Во время этого процесса я сделал дамп кучи и вижу многочисленные утечки LoginActivity. Также при включении StrictMode будут отображаться сообщения о утечке экземпляров LoginActivity.

person Iman Marashi    schedule 27.02.2015