【问题标题】:Reload a webview after turning on internet打开互联网后重新加载网页视图
【发布时间】:2015-02-04 14:23:00
【问题描述】:

我正在尝试将 url 加载到 webview 中。如果有互联网连接,它应该将其加载到 webview。否则,应显示重试屏幕。在重试屏幕中,我有一个重试按钮。如果我们点击它,应该会再次加载 url。但是使用我完成的代码,当我尝试通过单击重试按钮重新加载 url 时,应用程序不断崩溃(即使在我打开网络或它仍然关闭之后)。这是我的代码

    tryAgainButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            tryAgainLayout.setVisibility(View.GONE);
            browser = (WebView)findViewById(R.id.webView1);
            open(browser);
        }
    });



private void open(View view){
    browser.getSettings().setLoadsImagesAutomatically(true);
    browser.getSettings().setJavaScriptEnabled(true);
    browser.getSettings().setAppCacheEnabled(true);
    browser.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    browser.getSettings().setSupportMultipleWindows(true);
    browser.setWebViewClient(new MyBrowser());
    browser.setWebChromeClient(new MyCustomChromeClient());
    mContext=this.getApplicationContext();
    browser.loadUrl(target_url);
    MainActivity.this.progressBar.setProgress(0);
    browser.setDownloadListener(new DownloadListener() {
        public void onDownloadStart(String url, String userAgent,
                                    String contentDisposition, String mimetype,
                                    long contentLength) {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            startActivity(intent);
        }
    });
}

如何在单击重试按钮时重新加载页面。

【问题讨论】:

    标签: android webview reload


    【解决方案1】:

    这里有点假设,因为没有 logcat:

    1. 应用程序崩溃,因为您尝试通过在错误的布局/视图中搜索来获取浏览器视图。
    2. 如果你只是想重新加载,最好只做一个 browser.reload() int he click listener

    编辑简单的解决方案:创建一个监听器类并将 webView 作为参数传递给构造函数,以便它知道要重新加载什么。

    class WebViewReloader implements View.OnClickListener{
        private WebView browser = null;
    
        public WebViewReloader(WebView target){
            browser = target;
        }
    
        @Override
        public void onClick(View view) {
            tryAgainLayout.setVisibility(View.GONE);
            browser.reload();
        }
    }
    

    然后

    tryAgainButton.setOnClickListener(new WebViewReloader(browser));
    

    其他解决方案:使用对 WebView 的静态引用,或通过在其父布局中搜索来检索 WebView。

    【讨论】:

    • 我也试过这样做。但它仍然崩溃。在 logcat 中,我得到了浏览器的空指针异常(Webview 对象)
    • 您必须确保使用 corect 布局/视图搜索 Web 视图(调用 findViewById)。您在 Button 视图上调用 findViewById ,这将始终返回 null。我将通过提案编辑我的答案。
    • 似乎是个好主意。但应用程序仍然崩溃。我想我在某个地方犯了一些错误。这似乎是答案。
    • 我不知道它是否正确。但我这样做了,它现在工作了 tryAgainButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { tryAgainLayout.setVisibility(View.GONE); finish(); startActivity(getIntent()); } });
    猜你喜欢
    • 1970-01-01
    • 2023-02-18
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多