Android facebook sdk 内部实用程序 java.lang.AssertionError

Android facebook sdk internal utility java.lang.AssertionError

我一直在为 android 使用 facebook SDK 版本 4.27.0。我只遇到 android 8+ 设备的崩溃。堆栈跟踪如下:

Fatal Exception: java.lang.AssertionError: No NameTypeIndex match for SHORT_DAYLIGHT
       at android.icu.impl.TimeZoneNamesImpl$ZNames.getNameTypeIndex(TimeZoneNamesImpl.java:724)
       at android.icu.impl.TimeZoneNamesImpl$ZNames.getName(TimeZoneNamesImpl.java:790)
       at android.icu.impl.TimeZoneNamesImpl.getTimeZoneDisplayName(TimeZoneNamesImpl.java:183)
       at android.icu.text.TimeZoneNames.getDisplayName(TimeZoneNames.java:261)
       at java.util.TimeZone.getDisplayName(TimeZone.java:405)
       at java.util.TimeZone.getDisplayName(TimeZone.java:370)
       at com.facebook.internal.Utility.refreshTimezone(Utility.java:1066)
       at com.facebook.internal.Utility.refreshPeriodicExtendedDeviceInfo(Utility.java:1056)
       at com.facebook.internal.Utility.setAppEventExtendedDeviceInfoParameters(Utility.java:707)
       at com.facebook.internal.AppEventsLoggerUtility.getJSONObjectForGraphAPICall(AppEventsLoggerUtility.java:68)
       at com.facebook.FacebookSdk.publishInstallAndWaitForResponse(FacebookSdk.java:568)
       at com.facebook.FacebookSdk.run(FacebookSdk.java:547)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
       at java.lang.Thread.run(Thread.java:764)

我在网上搜索过这个,但找不到任何有用的东西。请在这里指点一下。

是的,即使我在使用 volley 库时在我的应用程序中也面临这种问题,即将进入具有 Android 8.0.1 版本的设备。

致命异常:java.lang.AssertionError SHORT_STANDARD

没有 NameTypeIndex 匹配
android.icu.impl.TimeZoneNamesImpl$ZNames.getNameTypeIndex 
(TimeZoneNamesImpl.java:724)
android.icu.impl.TimeZoneNamesImpl$ZNames.getName 
(TimeZoneNamesImpl.java:790)
android.icu.impl.TimeZoneNamesImpl.getTimeZoneDisplayName 
(TimeZoneNamesImpl.java:183)
android.icu.text.TimeZoneNames.getDisplayName (TimeZoneNames.java:261)
java.text.SimpleDateFormat.subFormat (SimpleDateFormat.java:1296)
java.text.SimpleDateFormat.format (SimpleDateFormat.java:1004)
java.text.SimpleDateFormat.format (SimpleDateFormat.java:974)
java.text.DateFormat.format (DateFormat.java:341)
com.android.volley.toolbox.HttpHeaderParser.formatEpochAsRfc1123 
(HttpHeaderParser.java:152)
com.android.volley.toolbox.BasicNetwork.getCacheHeaders 
(BasicNetwork.java:256)
com.android.volley.toolbox.BasicNetwork.performRequest 
(BasicNetwork.java:130)
com.android.volley.NetworkDispatcher.processRequest 
(NetworkDispatcher.java:120)
com.android.volley.NetworkDispatcher.run (NetworkDispatcher.java:87)

当我在 volley github 上提出这个 issue 时,在检查后他们回答说这是设备框架问题,意味着制造定制的 os 错误。 我觉得我们都面临着同样的问题,因为错误实际开始的行是 "android.icu.text.TimeZoneNames.getDisplayName(TimeZoneNames.java:261)" 在我们的两个堆栈跟踪中是相同的。这更多是 google 开发人员的 ICU package issue that is embedded in the framework. I found one personally forked Git class 是 IBM icu 的 class,其中行号 722 " throw new AssertionError("No NameTypeIndex match for " + type);" 实际上在我们的两个案例中都抛出了错误。让我们希望 Google 提出修复或任何解决方法。我的观察可能有误,你自己研究吧。

我也面临这个问题,请将 Facebook SDK 升级到最新版本(Facebook Android SDK 4.35),他们已针对此问题添加了解决方法:

 private static void refreshTimezone() {
    try {
        TimeZone tz = TimeZone.getDefault();
        deviceTimezoneAbbreviation = tz.getDisplayName(
                tz.inDaylightTime(new Date()),
                TimeZone.SHORT
        );
        deviceTimeZoneName = tz.getID();
    } catch (AssertionError e) {
      // Workaround for a bug in Android that can cause crashes on Android 8.0 and 8.1
    } catch (Exception e) {
    }
}