Android: EventHub.removeMessages(int what = 107) не поддерживается до настройки WebViewCore

Я реализовал WebView в диалоговом окне и загружаю простой URL-адрес в веб-просмотр.

мои настройки Webview такие

wbView = (WebView) findViewById(R.id.wbView);
        wbView.setKeepScreenOn(true);
        wbView.getSettings().setJavaScriptEnabled(true);
        wbView.getSettings().setDomStorageEnabled(true);
        wbView.getSettings().setBuiltInZoomControls(true);
        wbView.setInitialScale(100);
        // wbView.getSettings().setUseWideViewPort(true);
        wbView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
        wbView.setWebViewClient(new MyWebViewClient());

и MyWebViewClient() содержит

private class MyWebViewClient extends WebViewClient {
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            prgBar.setVisibility(View.GONE);
        }

        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler,
                SslError error) {
            Log.e("Error VAGARO", error.toString());
            prgBar.setVisibility(View.GONE);
            handler.proceed();
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return false;
        }
    }

Я загружаю два HTML-файла из актива в одном и том же веб-просмотре, он работает нормально, но не может загрузить динамический URL-адрес.

Я использую Google и нахожу несколько сообщений на http://code.google.com/p/android/issues/detail?id=21177

Мой logcat показывает мне

05-09 13:33:30.187: W/webcore(20054): java.lang.Throwable: EventHub.removeMessages(int what = 107) is not supported before the WebViewCore is set up.
05-09 13:33:30.187: W/webcore(20054):   at android.webkit.WebViewCore$EventHub.removeMessages(WebViewCore.java:1683)
05-09 13:33:30.187: W/webcore(20054):   at android.webkit.WebViewCore$EventHub.access$7900(WebViewCore.java:926)
05-09 13:33:30.187: W/webcore(20054):   at android.webkit.WebViewCore.removeMessages(WebViewCore.java:1795)
05-09 13:33:30.187: W/webcore(20054):   at android.webkit.WebView.sendOurVisibleRect(WebView.java:2917)
05-09 13:33:30.187: W/webcore(20054):   at android.webkit.ZoomManager.setZoomScale(ZoomManager.java:593)
05-09 13:33:30.187: W/webcore(20054):   at android.webkit.ZoomManager.access$1700(ZoomManager.java:49)
05-09 13:33:30.187: W/webcore(20054):   at android.webkit.ZoomManager$PostScale.run(ZoomManager.java:984)
05-09 13:33:30.187: W/webcore(20054):   at android.os.Handler.handleCallback(Handler.java:605)
05-09 13:33:30.187: W/webcore(20054):   at android.os.Handler.dispatchMessage(Handler.java:92)
05-09 13:33:30.187: W/webcore(20054):   at android.os.Looper.loop(Looper.java:137)
05-09 13:33:30.187: W/webcore(20054):   at android.app.ActivityThread.main(ActivityThread.java:4424)
05-09 13:33:30.187: W/webcore(20054):   at java.lang.reflect.Method.invokeNative(Native Method)
05-09 13:33:30.187: W/webcore(20054):   at java.lang.reflect.Method.invoke(Method.java:511)
05-09 13:33:30.187: W/webcore(20054):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-09 13:33:30.187: W/webcore(20054):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-09 13:33:30.187: W/webcore(20054):   at dalvik.system.NativeStart.main(Native Method)

Предложите мне изменение, которое я должен сделать.

Обновить

Я обнаружил, что если я передам любой URL-адрес, например «www.facebook.com», он выдаст мне эту ошибку, но если я заменю его на «https://www.facebook.com», тогда он будет работать нормально.


person Vishal Khakhkhar    schedule 09.05.2012    source источник
comment
Вы также увидите эту ошибку, если попытаетесь загрузить URL-адрес javascript: на несуществующую страницу.   -  person James Moore    schedule 14.05.2012


Ответы (5)


Проблема, которую я обнаружил, была связана с URL-адресом без http:// или https://. Поэтому я добавил этот тег, если URL-адрес не содержит http:// или https://.

person Vishal Khakhkhar    schedule 09.05.2012
comment
У меня была такая же проблема на Toshiba AT300 (Android 4.0.3) из-за косой черты в конце URL-адреса: scratch.mit.edu/projects/editor - person Rupert Rawnsley; 16.05.2013
comment
У меня такая же проблема. Использование WebView.loadUrl("http:///www.google.com"); работает. Однако, как только я пробую WebView.loadUrl("file:///android_asset/html5video.html");, появляется исключение. /фейспалм - person Someone Somewhere; 16.01.2014
comment
@VishalKhakhkhar, а если нужно загрузить строку типа HTML? - person krunal shah; 08.06.2015

В моем случае я исправил это, изменив порядок. Я поместил loadUrl перед getSettings()

Рабочий фрагмент ниже,

mWebView = (WebView) findViewById(R.id.web_view);

// load file
mWebView.loadUrl(SERVER_URL);
mWebView.getSettings().setJavaScriptEnabled(true);

Надеюсь, это поможет кому-то..

person Vijay C    schedule 27.07.2012

Я иногда видел этот стек в последние дни в моем LogCat, но до сих пор он не блокировал мою разработку. Но я подозреваю, что это связано с тем, что мой WebView иногда борется. Кажется, это ошибка, затрагивающая не только нас:


android.webkit.WebViewCore.removeMessages(int):void

1675        private synchronized void removeMessages(int what) {
1676            if (mBlockMessages) {
1677                return;
1678            }
1679            if (what == EventHub.WEBKIT_DRAW) {
1680                mDrawIsScheduled = false;
1681            }
1682            if (mMessages != null) {
1683                Throwable throwable = new Throwable(
1684                        "EventHub.removeMessages(int what = " + what + ") is not supported " +
1685                        "before the WebViewCore is set up.");
1686                Log.w(LOGTAG, Log.getStackTraceString(throwable));
1687            } else {
1688                mHandler.removeMessages(what);
1689            }
1690        }

Очередь mMessages должна быть NULL, чтобы избежать исключения.

// Message queue for containing messages before the WebCore thread is ready.

Итак, все очень просто: что-то заставляет WebCore устанавливаться гораздо дольше. В соответствии с тем, что 107 - это `SET_SCROLL_OFFSET', а трассировка стека показывает ZoomManger, я проверю, не вызывает ли что-то в моем коде активацию представления каким-либо образом при инициализации настроек.


ОТВЕТ: Это исключение будет выдано, если вы вызовете requestWindowFeature(Window.FEATURE_NO_TITLE), а затем слишком долго будете ждать вызова setContentView(). Как долго вы можете ждать, я не мог понять. Таким образом, эти две строки будут первыми строками в onCreate() с этого момента. Время покажет мне, прав ли я.

Хорошей новостью является то, что это предупреждение с тегом webcore является всего лишь предупреждением и само по себе не влияет на остальную часть приложения.

Плохая новость заключается в том, что кажется, что моя проблема не имеет к этому никакого отношения и исходит откуда-то из другого.

person Marvin Emil Brach    schedule 06.11.2012

Проблема обычно связана с тем, что указанный URL-адрес не найден. Это 404 (то есть URL-адрес, который не был найден). Изменить URL-адрес

person kakoma    schedule 10.06.2012

У меня та же проблема после того, как я позвонил finish() и перезапустил тот же Activity. Поэтому, возможно, он не может просто завершить действие с помощью WebView . Я сделал следующее, прежде чем закончить деятельность, и она работает.

try{
        webView.stopLoading();
        ViewGroup parent = (ViewGroup)webView.getParent();
        parent.removeView(webView);
        webView.destroy();
}catch(Exception e){
        Log.e(TAG, "clear webView fail");
        e.printStackTrace();
}
 finish();
person Yeung    schedule 09.04.2013