Java android webview显示空白页面

Java android webview显示空白页面,java,android,eclipse,android-emulator,webview,Java,Android,Eclipse,Android Emulator,Webview,我有一个android应用程序,我正在使用运行在android 2.3.3上的emulator开发,该emulator在线性布局(垂直)中嵌套了一个框架布局中的嵌入式WebView。无论我使用什么代码,它实际上都不会做任何事情。我有权限将android应用程序设置为INTERNET。 即使尝试只加载HTML代码。我得到一张空白的白纸,没有错误,什么都没有。logcat中也没有 WebView wview = (WebView)findViewById(R.id.webView1); wview.

我有一个android应用程序,我正在使用运行在android 2.3.3上的emulator开发,该emulator在线性布局(垂直)中嵌套了一个框架布局中的嵌入式WebView。无论我使用什么代码,它实际上都不会做任何事情。我有权限将android应用程序设置为INTERNET。 即使尝试只加载HTML代码。我得到一张空白的白纸,没有错误,什么都没有。logcat中也没有

WebView wview = (WebView)findViewById(R.id.webView1);
wview.getSettings().setJavaScriptEnabled(true);
我尝试了这三种方法,试图将任何内容加载到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);
wview.loadUrl(“http://www.google.com");
加载数据(“测试”、“文本/html”、“utf-8”);
loadDataWithBaseURL(null,“测试”、“文本/html”、“utf-8”、null);
这三个结果都一样。没什么


有什么想法吗?

您应该向它传递一个空的
字符串,而不是传递null。例如:

所以你应该这样称呼它:

wview.loadDataWithBaseURL(“,”测试“,”文本/html“,”utf-8“,”)

我想如果你编辑一些代码,那么就可以了。看看我在下面的例子中是如何做到的。用这种方式尝试一下。
用于显示网页

final WebView wbView = (WebView) findViewById(R.id.WebView);

WebSettings settings = wbView.getSettings();
settings.setJavaScriptEnabled(true); 
wbView.loadUrl("https://play.google.com/store/apps");
wbView.clearView();
wbView.measure(100, 100);
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
用于显示HTML:
请参见本教程


我给出了+1,因为这两个选项都是使webview正常工作的有效帮助,但这并不是我问题的解决方案

我没有意识到的是,我的webview布局的include上有一个wrap_内容,这导致它的高度为0px。通过将此设置为“填充父对象”,我解决了该问题。(白色背景的Webview和白色背景的应用程序当它在布局设计器中显示为全高时,您无法真正分辨它不是全高。)


谢谢你的帮助

您可以使用以下代码,这将非常有用:

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;
    }
}

clearView
已弃用

使用:


我想你需要的是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();
    }
}

可能有点晚了,但我想和你们分享我的经验,因为我也有同样的问题,并且花了很多时间在上面

将您的
WebView
放在
RelativeLayout
中,而不是放在
框架布局中

我测试的内容:我的
WebView
onPageFinished()
每次都被调用,但在屏幕上我得到了空白页面

chrome://inspect
WebView
调试器我可以通过按
inspect
按钮“ping”我的
WebView
,然后
WebView
立即刷新


我的想法-
WebView
FrameLayout
中没有正确呈现,而
RelativeLayout
解决了这个问题(甚至
invalidate()
requestLayout()
调用也没有帮助)。

更改wrap\u内容以填充WebView布局中的父项。这对我很有效

尝试增加模拟设备的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.

如果它仍然不起作用,请尝试在网址前添加“http://”或“https://”,它应该起作用。

我的网络视图在顶部显示一个白色空白方块,有时完全空白。这仅在加载某些数据时发生

将其更改为RelativeLayout,并将layout\u height设置为match\u 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>

.....

使用ip地址而不是web url,然后使用以下ssl错误处理方法覆盖webclient

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

在我的例子中,这是因为我的webview试图加载一个使用HTTPS的页面,其中证书是不可信的

您可以使用以下代码段检查代码中是否存在这种情况:

@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    handler.proceed();
}
爪哇

科特林


然后,如果是这种情况,请快速删除代码段并参考以进一步诊断问题,并可能将证书添加到密钥库中

这是我的问题。webview能够显示一些网页,但其他一些网页有一个空白屏幕。添加这个解决了我的问题,谢谢!我必须同时使用这个和
wbView.getSettings().setJavaScriptEnabled(true)节省我的时间…谢谢你。让我开心!非常感谢。非常感谢。根据您的布局,您可能还要确保您正在设置
android:layout\u height=“match\u parent”
(而不是
wrap\u content
),因为webApp一开始可能高度为零。我也遇到了同样的问题,而且它已经处于相对位置。。。我甚至设置了
settings.setDomStorageEnabled(true)并且我仍然在某个链接上看到一个白色页面。链接甚至是https。
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    handler.proceed(); // Ignore SSL certificate errors
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
    handler.proceed();
}
override fun onReceivedSslError(view: WebView?, handler: SslErrorHandler?, error: SslError?) {
    handler?.proceed()
}