Android O 8.0.0在调用CookieSyncManager的sync()方法时出现问题和崩溃

时间:2017-09-18 04:18:01

标签: android android-8.0-oreo

仅按照以下内容查看日志:“O”8 Google Pixel:

Fatal Exception: java.lang.NullPointerException
       at android.content.res.AssetManager.addAssetPathNative(AssetManager.java)
       at android.content.res.AssetManager.addAssetPathInternal(AssetManager.java:689)
       at android.content.res.AssetManager.addAssetPathAsSharedLibrary(AssetManager.java:684)
       at android.webkit.WebViewFactory.getProviderClass(WebViewFactory.java:407)
       at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:211)
       at android.webkit.CookieManager.getInstance(CookieManager.java:39)
       at android.webkit.CookieSyncManager.sync(CookieSyncManager.java:112)

有趣的是,这个问题是在做一次电话

android.webkit.CookieSyncManager cookieSyncManager = android.webkit.CookieSyncManager.createInstance(context);
        cookieSyncManager.sync();

根据文件https://developer.android.com/reference/android/webkit/CookieSyncManager.html 不推荐调用sync(),而应调用flush()。但该方法已被弃用。 在进行内部检查时,代码为CookieSyncManager,发现其执行如下

/**
     * sync() forces sync manager to sync now
     * @deprecated Use {@link CookieManager#flush} instead.
     */
    @Deprecated
    public void sync() {
        CookieManager.getInstance().flush();
    }

有兴趣了解这次失败的原因,因为Crashlytics显示了大量的崩溃事件。

1 个答案:

答案 0 :(得分:0)

看起来当你尝试创建类实例时,它失败了。那是因为他们改变了实例构造函数:

private CookieSyncManager() {
        super("CookieSyncManager");
    }

太:

private CookieSyncManager() {
        super(null, null);
    }

这也是你获得NullPointerException

的原因