web-dev-qa-db-ja.com

android空白ページを表示するウェブビュー

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つすべてで同じ結果が得られます。なし。

何か案は?

20
Chris White
wbView.getSettings().setDomStorageEnabled(true);
31
zionpi

少し遅すぎるかもしれませんが、同じ問題を抱えて多くの時間を費やしたので、私の経験をあなたと共有したかったのです。

WebViewRelativeLayoutではなくFrameLayoutに入れてください。

私がテストしたもの:WebViewonPageFinished()が毎回呼び出されましたが、画面上で空白のページが表示されました。 _chrome://inspect_ WebViewデバッガーからWebViewボタンを押すことでinspectを「ping」でき、その後WebViewがすぐに更新されました。私の考え-WebViewFrameLayoutで正しくレンダリングされず、RelativeLayoutは問題を修正します(invalidate()およびrequestLayout()呼び出しでも)助けなかった)。

12

あなたがあなたのコードのいくつかを編集するなら、それは大丈夫だと思います。
ウェブページの表示用

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を表示する場合:
このチュートリアルを参照してください。

11
ridoy

clearViewは非推奨です。

使用する:

webView.loadUrl("about:blank")
4
Yura Shinkarev

どちらもウェブビューを正常に機能させるための有効な支援であるため、+ 1を行いましたが、それは私の問題の解決策ではありませんでした。

私が気付いていなかったのは、WebViewレイアウトのインクルードにwrap_contentがあり、これにより高さが0pxになったことです。これをfill_parentに設定することで、問題を解決しました。 (白い背景のWebviewと白い背景のアプリは、レイアウトデザイナでフルハイトとして表示されたときに、フルハイトではないことを実際に伝えることはできません。)

あなたの助けをありがとう!

4
Chris White

nullを渡す代わりに、空のStringを渡す必要があります。例:_""_
したがって、次のように呼び出す必要があります。
wview.loadDataWithBaseURL("", "<HTML><BODY><H3>Test</H3></BODY></HTML>","text/html","utf-8","");

4
AbdulHannan

webViewレイアウトでwrap_contentをfill_parentに変更します。それは私のために働いた

2

必要なのは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();
    }
}
1
user4115463

それでも機能しない場合は、Webアドレスの前に"http://"または"https://"を追加してみてください。機能するはずです。

1
Shez Ratnani

エミュレートされたデバイスの[〜#〜] 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.
0
Nelson

次のコードを使用できます。これは役に立ちます。

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;
    }
}
0
Anchal Radhwani

web URLの代わりにIPアドレスを使用し、次のSSLエラー処理方法を使用してWebクライアントをオーバーライドします

@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    handler.proceed(); // Ignore SSL certificate errors
}
0
gite_rahul

私のウェブビューはその上に白い空白の正方形を表示していましたが、時には完全に空白でした。これは、特定のデータをロードしているときにのみ発生しました。

それを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>
0
live-love