onActivityResult получен до входа в систему

1

В учебниках по facebook я вижу этот пример кода:

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

    facebook.authorizeCallback(requestCode, resultCode, data);
}

Используя этот код, я получаю: onAuthFail с ошибкой = "Действие отменено".

Удаление

super.onActivityResult(requestCode, resultCode, data);

Он работает нормально.

Итак, мой вопрос: где поставить super.onActivityResult(requestCode, resultCode, data)? Перед обратным вызовом facebook, после или удалите его. В данный момент без вызова super.onActivityResult - код работает нормально. Может ли пропустить проблемы?

ОБНОВИТЬ:

Я использую это в манифесте:

<activity android:launchMode="singleInstance" android:name=".profile.LoginForm" 

android: screenOrientation = "портрет" android: noHistory = "true">

Может ли это вызвать проблему?

UPDATE2:

Причина, по которой в манифесте указывать "singleInstance", заключается в том, чтобы избежать перезапуска моей формы входа. Эта проблема вынудила к текущей проблеме.

  • 3
    К какому классу относится ваша деятельность? Если вы расширяете его из обычного класса Activity , это не должно быть проблемой. Реализация по умолчанию ничего не делает. Скорее всего, ваш суперкласс onActivityResult() немного onActivityResult() . Если это ваша собственная реализация: Можете ли вы также опубликовать этот источник?
  • 0
    Мой класс расширяет Атвити.
Теги:
facebook
login

2 ответа

5
Лучший ответ

Что касается вашего обновления:

android:launchMode="singleInstance" 

действительно вызывает проблемы с startActivityForResult() и onActivityResult(). См. Документацию launchMode:

С другой стороны, деятельность "singleInstance" не позволяет другим действиям не участвовать в ее задаче. Это единственное занятие в задаче. Если он запускает другое действие, эта деятельность назначается другой задаче.

Это означает, что запущенная функция auth facebook не является частью вашей текущей задачи и поэтому не может доставить никаких результатов. Если вы отлаживаете это, вы должны заметить, что onActivityResult() сразу после того, как была запущена суб-активность (что слишком рано, чтобы получить правильный/полезный результат).

Я бы сказал, изменив ваш launchMode на что-то другое (также не на singleTask, у него такая же проблема).

Я не уверен, как метод суперкласса влияет на это, хотя, поскольку вы утверждаете, что это исправлено. Теоретически это никогда не должно работать с singleInstance.

  • 0
    Twitter4j требуется единый экземпляр для аутентификации. Как я могу обрабатывать аутентификацию в Twitter и Facebook для одной и той же активности?
  • 0
    ПОЧЕМУ это ограничение нигде не onActiityReult в документации по onActiityReult ? Я не привык писать код, в котором нужно угадывать, каким должен быть дизайн.
0

Если вы посмотрите на исходный код Activity.onActivityResult(), вы заметите, что он пуст. Это означает следующее:

  • Удаление полностью в порядке
  • С другой стороны, тайна остается: нет очевидного способа, как пустой super вызов мог повлиять на метод Facebook.

UPD: комментарий alextsc предоставляет действительную гипотезу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню