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