You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从WebView返回Activity时Android应用崩溃问题求助

问题解决:WebView Activity返回时崩溃

问题描述

开发了一个包含两个Activity的简单应用,通过Intent从Menu Activity跳转到WebView时运行正常,但点击返回按钮回到原Activity时应用崩溃,提示“关闭应用”。代码无语法错误且Logcat未显示任何错误。

原代码如下:

public class WebView extends AppCompatActivity {
WebView webView;

@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_web_view);

    String url = getIntent().getStringExtra("site_url");
    android.webkit.WebView webView = findViewById(R.id.webView);
    webView.setWebViewClient(new WebViewClient());
    webView.getSettings().setSupportZoom(true);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl("" + url);

}

private class MywebClient extends WebViewClient {

    @Override
    public void onPageStarted(android.webkit.WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public boolean shouldOverrideUrlLoading(android.webkit.WebView view, WebResourceRequest request) {
        return super.shouldOverrideUrlLoading(view, request);
    }

}

@Override
public void onBackPressed() {
    android.webkit.WebView webView = null;
    if(webView.isFocused() && webView.canGoBack())
    {
        webView.goBack();
    }else{
        super.onBackPressed();
    }

}
}

问题分析

崩溃的核心原因是onBackPressed()方法中的错误:

  1. 方法内重新声明了局部变量android.webkit.WebView webView = null;,直接调用webView.isFocused()会触发空指针异常,这是返回时崩溃的根本原因。
  2. onCreate()方法中同样重新定义了局部的webView,导致类成员变量的webView始终为null,无法被后续方法正确调用。

解决方案

修正步骤:

  • 移除onCreate()中webView的局部声明,直接给类成员变量赋值
  • 移除onBackPressed()中重新定义的null值webView,使用类成员变量进行判断
  • 可选:使用自定义的MywebClient替代默认的WebViewClient,让代码逻辑更统一

修正后的完整代码

public class WebView extends AppCompatActivity {
    // 类成员变量
    android.webkit.WebView webView;

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);

        String url = getIntent().getStringExtra("site_url");
        // 直接给类成员变量赋值,不再声明局部变量
        webView = findViewById(R.id.webView);
        // 使用自定义的MywebClient
        webView.setWebViewClient(new MywebClient());
        webView.getSettings().setSupportZoom(true);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl(url);
    }

    private class MywebClient extends WebViewClient {
        @Override
        public void onPageStarted(android.webkit.WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public boolean shouldOverrideUrlLoading(android.webkit.WebView view, WebResourceRequest request) {
            return super.shouldOverrideUrlLoading(view, request);
        }
    }

    @Override
    public void onBackPressed() {
        // 使用类成员变量的webView,增加非空判断避免空指针
        if (webView != null && webView.isFocused() && webView.canGoBack()) {
            webView.goBack();
        } else {
            super.onBackPressed();
        }
    }
}

内容的提问来源于stack exchange,提问作者easyaccess

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:10:20