Ответ 1
Проблема, которую я обнаружил, вызвана URL-адресом без http://
или https://
. Поэтому я добавил этот тег, если URL не содержит http://
или https://
.
Я реализовал WebView в действии Dialog, и я загружаю простой 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 из Asset в том же webview, что и его работа, но не могу загрузить динамический url.
Я Google и найду несколько сообщений на http://code.google.com/p/android/issues/detail?id=21177
Мой лог-код показывает мне
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", тогда он будет работать отлично.
Проблема, которую я обнаружил, вызвана URL-адресом без http://
или https://
. Поэтому я добавил этот тег, если URL не содержит http://
или https://
.
В моем случае я исправил его, изменив порядок. Я положил loadUrl до getSettings()
Снимок ниже,
mWebView = (WebView) findViewById(R.id.web_view);
// load file
mWebView.loadUrl(SERVER_URL);
mWebView.getSettings().setJavaScriptEnabled(true);
Надеюсь, это поможет кому-то.
Я видел этот стек иногда в последние дни в моем LogCat, но до сих пор он не блокировал мой dev. Но я подозреваю, что это связано с тем, что я иногда пытаюсь использовать для своего 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
является только предупреждением и само по себе не влияет на остальную часть приложения.
Плохая новость заключается в том, что кажется, что моя проблема не имеет к этому никакого отношения и происходит откуда-то еще.
Проблема, как правило, связана с URL-адресом, указывающим на то, что он не найден. Это 404 (т.е. URL-адрес, который не найден). Изменить URL
У меня такая же проблема после того, как я вызвал 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();