Android - вход в Facebook вызывает ошибку onResume только в первый раз
Я могу успешно подключиться к Facebook и получить список друзей. Все соединения в порядке. Но когда я удаляю данные Facebook (через настройки-> Приложения) и моего приложения, возникает проблема входа в систему. [SDK 3.5]
- Запустите мое приложение
- Сделать подключение к Facebook
- Facebook запрашивает имя пользователя и пароль, введите их
- Подождите немного
- Он отображает экран разрешений, который запрашивает основную информацию о пользователе, и возникает ошибка:"Ваше приложение неожиданно перестало работать. Пожалуйста, попробуйте снова (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 в портретной. Есть проблема с потерей активности, если она не на портрете.. которая очень хромая...:|