CookieSyncManager::createInstance() IllegalStateException?

Мое приложение недавно начало получать много исключений CookieSyncManager:

java.lang.IllegalStateException: CookieSyncManager::createInstance() 
    needs to be called before CookieSyncManager::getInstance()
at android.webkit.CookieSyncManager.getInstance(CookieSyncManager.java:81)
at android.webkit.CookieManager$2.run(CookieManager.java:532)
at java.lang.Thread.run(Thread.java:1096)

Ошибка ясна из трассировки стека, но откуда она возникает (это из отчетов магазина Play). Пользовательские сообщения, прикрепленные к трассировке стека, указывают, что это происходит в том месте, где я использую SDK facebook, и он действительно использует CookieSyncManager:

// From Facebook.java
private void startDialogAuth(Activity activity, String[] permissions) {
    ...
    CookieSyncManager.createInstance(activity); // <-- here
    dialog(activity, LOGIN, params, new DialogListener() {
        public void onComplete(Bundle values) {
            CookieSyncManager.getInstance().sync(); // <-- here
            ...

https://github.com/facebook/facebook-android-sdk/blob/master/facebook/src/com/facebook/android/Facebook.java#L342

Это выглядит нормально для меня, но есть ли что-то неправильное в приведенном выше использовании? Я не могу воспроизвести ошибку ни на одном из моих тестовых устройств, возможно, есть разница в реализации?

Спасибо


person user291701    schedule 23.07.2012    source источник


Ответы (2)


Это должно быть похоже на исключение:

public void onComplete(Bundle values) {
   CookieSyncManager.createInstance( activity );    // <-- this line was missing
   CookieSyncManager.getInstance().sync();
   ...
person Marcin Orlowski    schedule 05.12.2012

Согласно документу Android

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    CookieSyncManager.createInstance(MainActivity.this);
    CookieSyncManager.getInstance().startSync();
}
public void onReume(){
    super.onResume();
    CookieSyncManager.getInstance().stopSync();
}
public void onPause(){
    super.onPause();
    CookieSyncManager.getInstance().sync();
}
person user3714144    schedule 15.10.2014