有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java My WebView未完成加载

嗨,我完全不知道为什么我的webview不调用onPageFinished方法,而且它一直显示加载对话框,我希望有人能帮助我解决这个问题。在Android清单文件中,我已经输入了internet权限和网络访问状态

这是我的代码:

public class MainActivity extends AppCompatActivity {

    WebView mWebView;
    RelativeLayout rLoading;
    Map<String, String> header;

    String urlToLoad;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mWebView = (WebView) findViewById(R.id.webView);
        rLoading = (RelativeLayout) findViewById(R.id.loading);

        if ( isNetworkAvailable() == true )     //check if internet available or not
        {
            mWebView.setFocusable(true);
            mWebView.setFocusableInTouchMode(true);
            mWebView.getSettings().setJavaScriptEnabled(true);
            mWebView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
            mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
            mWebView.getSettings().setDomStorageEnabled(true);
            mWebView.getSettings().setDatabaseEnabled(true);
            mWebView.getSettings().setAppCacheEnabled(true);
            mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
            mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

            urlToLoad = "https://www.google.com/";

            UsernamePasswordCredentials creds= new UsernamePasswordCredentials("username", "password");
            Header credHeader = BasicScheme.authenticate(creds, "UTF-8", true);
            header = new HashMap<String, String>();
            header.put(credHeader.getName(), credHeader.getValue());
            //show loading dialog
            mWebView.loadUrl(urlToLoad, header);
            mWebView.setWebViewClient(new WebViewClient(){
                public void onPageFinished(WebView view, String url) {

                        rLoading.setVisibility(View.GONE);

                }
            });
        }
        else    //Not connected
        {
            Toast.makeText(
                    this,
                    "No internet connection",
                    Toast.LENGTH_LONG
            ).show();
        }
    }

    public boolean isNetworkAvailable() {
        ConnectivityManager connectivityMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connectivityMgr.getActiveNetworkInfo();
        /// if no network is available networkInfo will be null
        if (networkInfo != null && networkInfo.isConnected()) {
            return true;
        }
        return false;
    }

    @Override
    public void onBackPressed() {
        if(mWebView.canGoBack()){
            mWebView.goBack();
        }else {
            super.onBackPressed();
        }
    }
  }

谁来帮帮我


共 (2) 个答案

  1. # 1 楼答案

    尝试以下Android WebView实现:

            webview= (WebView) findViewById(R.id.webview);
            webview.loadUrl("www.google.com");
            webview.setWebViewClient(new WebViewClient() {
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
                   //stop the ProgressBar
                    mProgressBar.setVisibility(View.INVISIBLE);
                }
            });
    
  2. # 2 楼答案

    你可以这样做

      mWebView.getSettings().setJavaScriptEnabled(true);
      mWebView.setWebViewClient(new WebViewClient() {
    
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String urlNewString) {
    
                return true;
            }
    
            @Override
            public void onPageStarted(WebView view, String url, Bitmap facIcon) {
    
                //SHOW LOADING IF IT ISNT ALREADY VISIBLE
            }
    
            @Override
            public void onPageFinished(WebView view, String url) {
                progressDialog.dismiss();
            }
        });