【问题标题】:Android 7.0 shows blank screen when trying to open url in webview尝试在 webview 中打开 url 时,Android 7.0 显示空白屏幕
【发布时间】:2017-01-02 11:13:11
【问题描述】:

我在 Android 7.0 (moto g4) 中面临一个问题,我试图在 webview 中加载一个 url,但它显示一个空白屏幕。它适用于 Android M 及以下版本。

public class MainActivity extends Activity {

 private String webviewURL="http://henmilholidayhomesgoa.com/player2/documentation/EULA.html";


    private WebView wv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        wv= (WebView) findViewById(R.id.webview);
        wv.getSettings().setTextZoom(60);
        wv.getSettings().setBuiltInZoomControls(true);
        wv.getSettings().setJavaScriptEnabled(true);
        wv.loadUrl(webviewURL);

    }

}

注意:- 代码中提到的 url 不是实际的 url,很遗憾我不能分享 :(。它是一个带有 https 的 url。但是帖子中给定的 url 确实有效,如果有,请告诉我需要其他输入。在此先感谢

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
            <WebView
                android:id="@+id/webview"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center" />
    </RelativeLayout>

【问题讨论】:

  • 您打开的是什么类型的 url,我的意思是说任何文档或网站或 pdf 或任何其他媒体类型?
  • 如果上面的网址可以正常工作,那么您想要的网址也应该如此。您帖子中的网址有 http 尝试使用 https 输入其他网址说:“google.com
  • 您需要找到一些可以重现您可以在您的问题中提出的问题的 URL。
  • 当我找到@CommonsWare 时我会更新它
  • 我将 html 页面保存到我的资产文件夹并尝试它可以正常工作(在 android 7.0 中),但其中显示了一些 ASCII 字符。所以我尝试以编程方式检索 url 内容并使用 webview.loadData(response, "text/html; charset=utf-8",null);这也有效(在android 7.0中)。有没有这方面的cmets?

标签: android webview android-7.0-nougat


【解决方案1】:

试试这个示例代码:

其中有一个webview和一个进度条。在此代码中,一旦进度条消失,就会加载url,如果url中有任何链接,它也会在webview中打开它。

下面是java代码:

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class ShowWebView extends Activity {

    //private Button button;
    private WebView webView;
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.show_web_view);

        //Get webview 
        webView = (WebView) findViewById(R.id.webView1);

        startWebView("http://www.androidexample.com/media/webview/login.html");

    }

    private void startWebView(String url) {

        //Create new webview Client to show progress dialog
        //When opening a url or click on link

        webView.setWebViewClient(new WebViewClient() {      
            ProgressDialog progressDialog;

            //If you will not use this method url links are opeen in new brower not in webview
            public boolean shouldOverrideUrlLoading(WebView view, String url) {              
                view.loadUrl(url);
                return true;
            }

            //Show loader on url load
            public void onLoadResource (WebView view, String url) {
                if (progressDialog == null) {
                    // in standard case YourActivity.this
                    progressDialog = new ProgressDialog(ShowWebView.this);
                    progressDialog.setMessage("Loading...");
                    progressDialog.show();
                }
            }
            public void onPageFinished(WebView view, String url) {
                try{
                if (progressDialog.isShowing()) {
                    progressDialog.dismiss();
                    progressDialog = null;
                }
                }catch(Exception exception){
                    exception.printStackTrace();
                }
            }

        }); 

         // Javascript inabled on webview  
        webView.getSettings().setJavaScriptEnabled(true); 

        // Other webview options
        /*
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        webView.setScrollbarFadingEnabled(false);
        webView.getSettings().setBuiltInZoomControls(true);
        */

        /*
         String summary = "<html><body>You scored <b>192</b> points.</body></html>";
         webview.loadData(summary, "text/html", null); 
         */

        //Load url in webview
        webView.loadUrl(url);


    }

    // Open previous opened link from history on webview when back button pressed

    @Override
    // Detect when the back button is pressed
    public void onBackPressed() {
        if(webView.canGoBack()) {
            webView.goBack();
        } else {
            // Let the system handle the back button
            super.onBackPressed();
        }
    }

}

下面是相应的 xml 代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

   <WebView 
    android:id="@+id/webView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
/>       
</LinearLayout>

请在 android 7.0 中检查此代码。希望对你有所帮助!

【讨论】:

    【解决方案2】:

    我已复制您的相同代码并在 nougat Nexus 9 上运行该应用程序。 加载 URL 需要时间等待 5 分钟,否则请与 Nougat 的其他设备检查。

    public class WebviewMainActivity extends AppCompatActivity {
    private WebView wv;
    private String webviewURL = "http://stackoverflow.com/questions/41425766/android-7-0-shows-blank-screen-when-trying-to-open-url-in-webview";
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_webview_main);
        wv = (WebView) findViewById(R.id.webview);
        wv.getSettings().setTextZoom(60);
        wv.getSettings().setBuiltInZoomControls(true);
        wv.getSettings().setJavaScriptEnabled(true);
        wv.loadUrl(webviewURL);
    }}
    

    希望这个帮助。祝你编码愉快。如果有帮助,请告诉我。

    【讨论】:

      【解决方案3】:

      我在 Asus Nexus 7 上遇到过类似问题。Webview 版本为 56,而 Chrome 浏览器应用程序版本较低。更新 Google Chrome 应用程序后,webview 开始正常工作。

      【讨论】:

      • 您好,先生,我使用了 Google 像素。我遇到了同样的问题,根据您的评论,我已经更新了我的 crome 应用程序,但仍然面临同样的问题。请回复我任何其他解决方案。提前谢谢你。
      【解决方案4】:

      您可以使用 loadDataWithBaseURL 代替 loadData 并尝试,我在某些设备上遇到了类似的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-17
        • 1970-01-01
        • 2014-01-13
        相关资源
        最近更新 更多