#android-webview #android-5.0-lollipop
Вопрос:
Это исключение возникает только в Android 5.1 (Samsung galaxy J3 2016)
Лог:
Caused by java.lang.UnsupportedOperationException
java.util.Collections$SingletonMap$1$1.remove (Collections.java:355)
java.util.AbstractMap.remove (AbstractMap.java:397)
org.chromium.android_webview.AwContents.loadUrl (AwContents.java:1594)
org.chromium.android_webview.AwContents.loadUrl (AwContents.java:1458)
com.android.webview.chromium.WebViewChromium.loadUrl (WebViewChromium.java:496)
android.webkit.WebView.loadUrl (WebView.java:862)
У меня нет этого устройства, я получаю массу таких исключений из своего отчета crashlytics.
Мои настройки веб-просмотра приведены ниже:
settings.loadWithOverviewMode = true
settings.useWideViewPort = true
@SuppressLint("SetJavaScriptEnabled")
settings.javaScriptEnabled = true
settings.domStorageEnabled = true
webViewClient = WebViewClient()
И я загружаю URL-адрес с дополнительными заголовками:
val extraHeaders = mapOf("Referer" to "https://my.site.url")
webView.loadUrl(state.url, extraHeaders)
Ответ №1:
Хорошо, я нашел проблему: в исходном коде AwContents в методе loadUrl вы можете найти такой блок:
final String REFERER = "referer";
Map<String, String> extraHeaders = params.getExtraHeaders();
if (extraHeaders != null) {
for (String header : extraHeaders.keySet()) {
if (REFERER.equals(header.toLowerCase(Locale.US))) {
params.setReferrer(new Referrer(extraHeaders.remove(header), 1));
params.setExtraHeaders(extraHeaders);
break;
}
}
}
интересно то extraHeaders.remove(header)
, что, поскольку я создаю неизменяемую карту, это вызывает исключение UnsupportedOperationException.
Внес это изменение:
val extraHeaders = mutableMapOf("Referer" to "https://my.site.url")