Фактически он вызывает функцию f
для каждого аргумента в args
в неуказанном порядке.
[](...){}
создает лямбда-функцию, которая ничего не делает и получает произвольное количество аргументов (va args).
((f(std::forward(args)), 0)...)
аргумент lambda.
(f(std::forward(args)), 0)
вызывать f
с переадресованным аргументом, отправить 0
в lambda.
Если вы хотите, чтобы указанный заказ вы можете использовать следующее: :
using swallow = int[];
(void)swallow{0, (f(std::forward(args)), 0)...};
Эта ошибка на самом деле происходит из-за пределов вашего приложения в большинстве случаев (иногда это просто отсутствующее INTERNET
разрешение, но здесь это не похоже на случай).
Я печатал объяснение, но нашел гораздо более простой пример, который удваивается как объяснение в этого ответа на другой вопрос . Вот соответствующие биты, перефразированные немного:
no-cache
в заголовке, что означает, что он всегда будет запрашиваться с сервера. Проблема возникает из этого последнего шага. Страница подтверждения была помечена no-cache
, поэтому ее необходимо запросить с сервера еще раз. Но чтобы правильно показать ту же страницу, те же данные, которые были переданы в первый раз, должны быть отправлены снова.
Это приводит к тому, что Джо получает счет дважды, так как делается новый запрос с той же информацией, что и в прошлый раз. Джо не будет счастливым туристом, когда он обнаружит два обвинения на своем счету и дополнительную пару палаток на его пороге.
Кажется, эта ситуация была достаточно распространенной, и теперь она является стандартной ошибкой для большинства браузеров и, по-видимому, для более новых версий Android. Ошибка на самом деле происходит от Chromium, поэтому вы увидите ту же ошибку в Google Chrome и почему вы видите ее только в 4.4 (которая представила новую версию WebView на основе Chromium ).
На самом деле, вы, вероятно, уже видели это раньше, это сообщение, которое появляется в большинстве браузеров и предупреждает вас чем-то вроде «Чтобы обновить эту страницу, браузер должен будет повторно отправить данные ...» Яда Яда Яда ".
Это способ Android 4.4, предупреждающий вас о том, что происходит. Как это исправить, зависит от того, к чему вы подключаетесь, но если вы будете искать эту ситуацию, вы обнаружите, что она довольно распространена и содержит исправления. Точный триггер ошибки на самом деле, когда запрос не может быть обслужен из кэша (в этом случае, no-cache
вызывает это).
В зависимости от характера запроса, возможно, no-cache
на самом деле не нужен.
Но с точки зрения вашего приложения главная проблема в том, что onReceiveError
является своего рода «последним средством» для WebView. Ошибки, которые вы получаете, распространились из базовой системы. И как только вы окажетесь там, вы не сможете продолжить загрузку страницы в том виде, в каком она стоит . Таким образом, у вас нет возможности разрешить повторную отправку, и вы не можете предоставить пользователю такую возможность, в отличие, скажем, от Google Chrome.
Используйте
if (Build.VERSION.SDK_INT >= 19) {
mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
}
. Это исправит ERR_CACHE_MISS в WebView. Возможно, вам потребуется изменить его на SDK_INT == 19 после некоторых обновлений Lollipop WebView, но пока это работает.
это разрешение в вашем файле andriodManifest.xml
<uses-permission android:name="android.permission.INTERNET"/>
Я столкнулся с той же проблемой, потому что в папке с манифестами у меня было прописное разрешение Интернета:
У меня было (ошибка)
<uses-permission android:name="ANDROID.PERMISSION.INTERNET"/>
Должен иметь (без ошибки)
<uses-permission android:name="android.permission.INTERNET"/>