Android - вход в Facebook вызывает ошибку onResume только в первый раз

Я могу успешно подключиться к Facebook и получить список друзей. Все соединения в порядке. Но когда я удаляю данные Facebook (через настройки-> Приложения) и моего приложения, возникает проблема входа в систему. [SDK 3.5]

  1. Запустите мое приложение
  2. Сделать подключение к Facebook
  3. Facebook запрашивает имя пользователя и пароль, введите их
  4. Подождите немного
  5. Он отображает экран разрешений, который запрашивает основную информацию о пользователе, и возникает ошибка:"Ваше приложение неожиданно перестало работать. Пожалуйста, попробуйте снова (FORCE CLOSE)"

Когда я нажимаю "Принудительно закрыть", та же самая ошибка возникает снова и снова внезапно (пока экран разрешений все еще позади). Если я могу быть достаточно быстрым, я нажимаю "Принудительно закрыть", а затем "Разрешить разрешение", все идет хорошо, и я вижу своих друзей. Таким образом, эта ошибка FORCE CLOSE означает что-то вроде ничего? В журнале есть 3-4 таких же сообщения о фатальных исключениях, потому что каждый раз, когда я нажимаю кнопку "ЗАКРЫТЬ", ошибка повторяется. Эта ошибка возникает, когда я пытаюсь установить приложение на своем телефоне (SE Xperia Arc S, 2.3.3). Но когда я примеряю эмуляторы, ошибка не возникает. Работает без проблем. (эмуляторы 2.3.3 и 4.2)

    09-04 18:09:47.916 E/AndroidRuntime(29511): FATAL EXCEPTION: main
09-04 18:09:47.916 E/AndroidRuntime(29511): java.lang.RuntimeException: Unable to resume activity {com.ilanharitasi/com.facebook.LoginActivity}: java.lang.NullPointerException
09-04 18:09:47.916 E/AndroidRuntime(29511): Caused by: java.lang.NullPointerException
09-04 18:09:47.916 E/AndroidRuntime(29511):     ... 12 more
09-04 18:09:51.526 E/AndroidRuntime(29538): FATAL EXCEPTION: main
09-04 18:09:51.526 E/AndroidRuntime(29538): java.lang.RuntimeException: Unable to resume activity {com.ilanharitasi/com.facebook.LoginActivity}: java.lang.NullPointerException
09-04 18:09:51.526 E/AndroidRuntime(29538): Caused by: java.lang.NullPointerException
09-04 18:09:51.526 E/AndroidRuntime(29538):     ... 12 more
09-04 18:09:53.786 E/AndroidRuntime(29547): FATAL EXCEPTION: main
09-04 18:09:53.786 E/AndroidRuntime(29547): java.lang.RuntimeException: Unable to resume activity {com.ilanharitasi/com.facebook.LoginActivity}: java.lang.NullPointerException
09-04 18:09:53.786 E/AndroidRuntime(29547): Caused by: java.lang.NullPointerException
09-04 18:09:53.786 E/AndroidRuntime(29547):     ... 12 more
09-04 18:09:55.516 E/AndroidRuntime(29557): FATAL EXCEPTION: main
09-04 18:09:55.516 E/AndroidRuntime(29557): java.lang.RuntimeException: Unable to resume activity {com.ilanharitasi/com.facebook.LoginActivity}: java.lang.NullPointerException
09-04 18:09:55.516 E/AndroidRuntime(29557): Caused by: java.lang.NullPointerException
09-04 18:09:55.516 E/AndroidRuntime(29557):     ... 12 more
09-04 18:09:57.776 E/AndroidRuntime(29564): FATAL EXCEPTION: main
09-04 18:09:57.776 E/AndroidRuntime(29564): java.lang.RuntimeException: Unable to resume activity {com.ilanharitasi/com.facebook.LoginActivity}: java.lang.NullPointerException
09-04 18:09:57.776 E/AndroidRuntime(29564): Caused by: java.lang.NullPointerException
09-04 18:09:57.776 E/AndroidRuntime(29564):     ... 12 more
09-04 18:09:59.186 E/dalvikvm(29571): Could not find class 'dalvik.system.BaseDexClassLoader', referenced from method com.facebook.common.dextricks.SystemClassLoaderAdder.a
09-04 18:09:59.586 E/dalvik-internals(29571): Failed to look up ladDumpProfiles
09-04 18:09:59.586 E/dalvik-internals(29571): Failed to look up ladResetProfiles
09-04 18:09:59.586 E/dalvik-internals(29571): Failed to look up ladPrintHeaderInfo
09-04 18:09:59.936 E/AndroidRuntime(29578): FATAL EXCEPTION: main
09-04 18:09:59.936 E/AndroidRuntime(29578): java.lang.RuntimeException: Unable to resume activity {com.ilanharitasi/com.facebook.LoginActivity}: java.lang.NullPointerException
09-04 18:09:59.936 E/AndroidRuntime(29578): Caused by: java.lang.NullPointerException
09-04 18:09:59.936 E/AndroidRuntime(29578):     ... 12 more
09-04 18:10:02.006 E/AndroidRuntime(29585): FATAL EXCEPTION: main
09-04 18:10:02.006 E/AndroidRuntime(29585): java.lang.RuntimeException: Unable to resume activity {com.ilanharitasi/com.facebook.LoginActivity}: java.lang.NullPointerException
09-04 18:10:02.006 E/AndroidRuntime(29585): Caused by: java.lang.NullPointerException
09-04 18:10:02.006 E/AndroidRuntime(29585):     ... 12 more
09-04 18:10:04.566 E/ONRESUME(29605): Onresume worked
09-04 18:10:04.636 E/STATEM  (29605): OPENING
09-04 18:10:05.186 E/ONRESUME(29605): Onresume worked

После первого подключения я могу найти своих друзей без ошибок. Это происходит только после того, как я впервые подключаюсь к Facebook и запрашивает у меня имя пользователя и пароль (а затем нажимает кнопку "Войти").

@Override
  public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    uiHelper = new UiLifecycleHelper(this, callback);
    uiHelper.onCreate(savedInstanceState);

    setContentView(R.layout.activity_fb_findfriends);
    LinearLayout v = (LinearLayout) findViewById(R.id.fb_app_users);
    openSession(v);

  }

public void openSession(View v){
        // start Facebook Login
        Session.openActiveSession(this, true, callback);

    }

@Override
  protected void onResume() {
      super.onResume();
      uiHelper.onResume();
      Log.e("ONRESUME", "Onresume çalıştı");
  }

private void requestMyAppFacebookFriends(Session session) {
        Request friendsRequest = createRequest(session);
        friendsRequest.setCallback(new Request.Callback() {

            @Override
            public void onCompleted(Response response) {

                List<GraphUser> friends = getResults(response);
                //Display Friends
            }
        });
    friendsRequest.executeAsync();
}

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

ОБНОВИТЬ! Я нашел строку, где происходит ошибка. Он находится внутри строки com.facebook.AuthorizationClient.java 135

void startOrContinueAuth(AuthorizationRequest request) {
        if (appEventsLogger == null || appEventsLogger.getApplicationId() != request.getApplicationId()) {
            Log.e("HATA!", "BOOM");
            appEventsLogger = AppEventsLogger.newLogger(context, request.getApplicationId());
        }

И этот метод startOrContinueAuth запускается в com.Facebook.LoginActivity

@Override
public void onResume() {
    super.onResume();

    // If the calling package is null, this generally means that the callee was started
    // with a launchMode of singleInstance. Unfortunately, Android does not allow a result
    // to be set when the callee is a singleInstance, so we log an error and return.
    if (callingPackage == null) {
        Log.e(TAG, "Aheyy"+NULL_CALLING_PKG_ERROR_MSG);
        finish();
        return;
    }

    authorizationClient.startOrContinueAuth(request);
}
        if (getInProgress()) {
            continueAuth();
        } else {
            authorize(request);
        }
    }

ОБНОВЛЕНИЕ 2!

  • Я очень запутался. Я упростил свое приложение до самого базового метода openActiveSession(). Сбои
  • Я попробовал пример приложения Facebook, FriendPicker, и оно также вылетало с тем же выводом ошибки журнала.
  • попробовал на эмуляторе, он работает, но когда я поворачиваю экран, когда появляется экран авторизации (отмена-разрешить), возникает та же ошибка (не удается включить резюме, бла-бла...) Получение такой же ошибки в примере приложения Facebook странно

4 ответа

Я не верю, что это проблема вашего приложения. Люди сообщают об этой ошибке, и я только что ответил на аналогичный вопрос здесь. В основном Facebook выпустил новую версию своего SDK вчера, исправляя сбой onResume NPE в их AuthorizationClient. Посмотрите, если обновление решит вашу проблему.

Согласно журналу изменений https://developers.facebook.com/docs/android/change-log-3.x/,
в Facebook версии 3.5.1 исправлено множество проблем с аутентификацией и регистрацией событий приложения, поэтому, возможно, она была решена в последней версии, которую можно скачать по https://github.com/facebook/facebook-android-sdk. Я надеюсь, что это может решить вашу проблему:)

В основном эта проблема возникает, когда вызывающая деятельность не активна или не уничтожена. В android метод onActivityResult() вызывается после входа в систему. Операция принудительно уничтожается мобильным устройством (опция "Не сохранять действия" включается в настройках параметров разработчика). Пожалуйста, перепроверьте в настройках параметров разработчиков, что действия "Не сохранять" включены или отключены.

Убедитесь в своем манифесте, что активность lgin в портретной. Есть проблема с потерей активности, если она не на портрете.. которая очень хромая...:|

Другие вопросы по тегам