ダイアログアクティビティにWebViewを実装し、単純なURLをWebviewにロードしています。
私の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;
}
}
同じWebビューのアセットから2つのHTMLファイルをロードしていますが、正常に機能していますが、動的URLをロードできません。
私はグーグルでいくつかの投稿を見つけます 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)
私が行うべき変更を提案してください。
更新
「www.facebook.com」のようなURLを渡すと、このエラーが発生することがわかりましたが、「https://www.facebook.com」に置き換えると、正常に機能します。
私が見つけた問題は、http://
またはhttps://
のないURLが原因でした。そのため、URLにhttp://
またはhttps://
が含まれていない場合は、このタグを追加しました。
私の場合は、順番を変えて修正しました。 loadUrlをgetSettings()の前に置きました
以下の作業スニペット、
mWebView = (WebView) findViewById(R.id.web_view);
// load file
mWebView.loadUrl(SERVER_URL);
mWebView.getSettings().setJavaScriptEnabled(true);
これが誰かを助けることを願っています。
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()
の呼び出しを待つ時間が長すぎる場合にスローされます。どれくらい待つことができるかわかりませんでした。したがって、これら2つは、これから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();