Androidで実行しているエミュレーターを使用して開発しているアプリケーションをAndroid 2.3.3 linearlayout(vertical)にネストされたframelayoutに埋め込まれたWebViewとともに使用している使用するコードに関係なく、実際には何も実行されません。Androidアプリケーションはインターネットに設定されています。HTMLコードのみをロードしようとしても、空白の白いページが表示されます。エラーも何もありません。logcatにも何もありません。
WebView wview = (WebView)findViewById(R.id.webView1);
wview.getSettings().setJavaScriptEnabled(true);
私はこれら3つすべてを試して、WebViewに何かをロードしようとしました:
wview.loadUrl("http://www.google.com");
wview.loadData("<HTML><BODY><H3>Test</H3></BODY></HTML>","text/html","utf-8");
wview.loadDataWithBaseURL(null, "<HTML><BODY><H3>Test</H3></BODY></HTML>","text/html","utf-8",null);
3つすべてで同じ結果が得られます。なし。
何か案は?
wbView.getSettings().setDomStorageEnabled(true);
少し遅すぎるかもしれませんが、同じ問題を抱えて多くの時間を費やしたので、私の経験をあなたと共有したかったのです。
WebView
をRelativeLayout
ではなくFrameLayout
に入れてください。
私がテストしたもの:WebView
のonPageFinished()
が毎回呼び出されましたが、画面上で空白のページが表示されました。 _chrome://inspect
_ WebView
デバッガーからWebView
ボタンを押すことでinspect
を「ping」でき、その後WebView
がすぐに更新されました。私の考え-WebView
はFrameLayout
で正しくレンダリングされず、RelativeLayout
は問題を修正します(invalidate()
およびrequestLayout()
呼び出しでも)助けなかった)。
あなたがあなたのコードのいくつかを編集するなら、それは大丈夫だと思います。
ウェブページの表示用
final WebView wbView = (WebView) findViewById(R.id.WebView);
wbView.getSettings().setJavaScriptEnabled(true);
wbView.loadUrl("https://play.google.com/store/apps");
wbView.clearView();
wbView.measure(100, 100);
wbView.getSettings().setUseWideViewPort(true);
wbView.getSettings().setLoadWithOverviewMode(true);
HTMLを表示する場合:
このチュートリアルを参照してください。
clearView
は非推奨です。
使用する:
webView.loadUrl("about:blank")
どちらもウェブビューを正常に機能させるための有効な支援であるため、+ 1を行いましたが、それは私の問題の解決策ではありませんでした。
私が気付いていなかったのは、WebViewレイアウトのインクルードにwrap_contentがあり、これにより高さが0pxになったことです。これをfill_parentに設定することで、問題を解決しました。 (白い背景のWebviewと白い背景のアプリは、レイアウトデザイナでフルハイトとして表示されたときに、フルハイトではないことを実際に伝えることはできません。)
あなたの助けをありがとう!
nullを渡す代わりに、空のString
を渡す必要があります。例:_""
_
したがって、次のように呼び出す必要があります。wview.loadDataWithBaseURL("", "<HTML><BODY><H3>Test</H3></BODY></HTML>","text/html","utf-8","");
webViewレイアウトでwrap_contentをfill_parentに変更します。それは私のために働いた
必要なのはWebViewClientだと思います。 webviewclientを設定した後、webview.loadUrl(_url)を呼び出します。このような何か....
private void loadUrlInWebView(String _URL){
WebView myWebView = (WebView) findViewById(R.id.webviewer);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
myWebView.setWebViewClient(new MyWebViewClient());
myWebView.loadUrl(_URL);
}
private class MyWebViewClient extends WebViewClient{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
}
}
それでも機能しない場合は、Webアドレスの前に"http://"または"https://"を追加してみてください。機能するはずです。
エミュレートされたデバイスの[〜#〜] ram [〜#〜]を増やしてみてください。これで問題は解決しました。
Android Monitor(Android Studio))のlogcatメッセージを見て、これを見つけました。以下のメッセージは、何が間違っているのかを教えてくれました[〜#〜] ram [〜#〜]:
W/art: Throwing OutOfMemoryError "Failed to allocate a 6635532 byte allocation with 1170528 free bytes and 1143KB until OOM"
W/JavaBrowserViewRendererHelper: Error allocating bitmap
E/chromium: [ERROR:Java_browser_view_renderer_helper.cc(132)] Error unlocking Java bitmap pixels.
次のコードを使用できます。これは役に立ちます。
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setWebViewClient(new MyWebViewClient());
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals("www.example.com")) {
// This is my web site, so do not override; let my WebView load the page
return false;
}
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
}
web URLの代わりにIPアドレスを使用し、次のSSLエラー処理方法を使用してWebクライアントをオーバーライドします
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // Ignore SSL certificate errors
}
私のウェブビューはその上に白い空白の正方形を表示していましたが、時には完全に空白でした。これは、特定のデータをロードしているときにのみ発生しました。
それをRelativeLayoutに変更し、layout_heightをmatch_parentに設定するとうまくいきました。
<RelativeLayout xmlns:Android=...
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<RelativeLayout
Android:id="@+id/ll_title"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentTop="true"
Android:layout_marginTop="3dp"
Android:gravity="center_vertical"
Android:orientation="horizontal">
.....
</RelativeLayout>
<WebView
Android:id="@+id/web_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_below="@id/ll_title"
Android:background="@color/colorYellow" />
<ProgressBar
Android:id="@+id/pb_spinning"
style="?android:attr/progressBarStyleSmall"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true"
Android:layout_centerVertical="true"
Android:visibility="gone" />
</RelativeLayout>