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

双按钮搭配WebView的Android应用崩溃排查求助

排查你的Android应用崩溃问题

让我帮你一步步揪出代码里的问题,这些都是新手开发常踩的坑~

1. MainActivity 里的逻辑错误与崩溃隐患

你的setButtononClick方法存在三个关键问题:

  • 重复启动Intent:在switch分支里已经调用startActivity打开系统浏览器,后面又再次启动新的Intent,不仅逻辑冗余,还会引发跳转冲突。
  • 空URL导致崩溃:如果点击的按钮id不在case范围内(比如布局里按钮id写错),url会保持null,此时Uri.parse(url)会直接抛出NullPointerException,直接导致应用崩溃。
  • 跳转目标错误:你本来想打开自定义的WebView页面,但当前代码用Intent.ACTION_VIEW会调用系统浏览器,完全没用到你写的WebViewActivity。

修正后的MainActivity代码

public void setButtononClick(View v) {
    String url = null;
    switch(v.getId()) {
        case R.id.button1:
            url = "https://www.delfi.lt";
            break;
        case R.id.button2:
            url = "https://www.youtube.com";
            break;
        default:
            // 处理未知按钮,避免url为空
            Toast.makeText(this, "未知按钮", Toast.LENGTH_SHORT).show();
            return;
    }
    // 跳转到自定义WebViewActivity,传递URL参数
    Intent intent = new Intent(this, WebViewActivity.class);
    intent.putExtra("URL", url);
    startActivity(intent);
}

2. WebViewActivity 里的空指针与配置缺失

你的WebView代码有两个崩溃点和一个功能缺陷:

  • 空指针异常:直接调用getIntent().getExtras().getString("URL"),如果Intent没有携带参数,getExtras()会返回null,调用getString()就会崩溃。
  • WebView配置不全:没有启用JavaScript、DOM存储等必要设置,也没设置WebViewClient,会导致网页加载失败或自动跳转到系统浏览器。
  • 缺少网络权限:如果AndroidManifest.xml里没加网络权限,WebView根本无法加载网页,也会引发崩溃或加载失败。

修正后的WebViewActivity代码

private WebView webView;

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

    webView = findViewById(R.id.webView1);
    
    // 先判断Intent参数是否存在,避免空指针
    if (getIntent() != null && getIntent().getExtras() != null) {
        String url = getIntent().getExtras().getString("URL");
        if (url != null) {
            // 配置WebView基础设置
            WebSettings webSettings = webView.getSettings();
            webSettings.setJavaScriptEnabled(true); // 多数现代网页需要JS支持
            webSettings.setDomStorageEnabled(true); // 启用DOM存储适配复杂网页
            
            // 设置WebViewClient,让网页在WebView内打开,不跳转系统浏览器
            webView.setWebViewClient(new WebViewClient());
            
            // 加载目标网页
            webView.loadUrl(url);
        } else {
            Toast.makeText(this, "无效的URL", Toast.LENGTH_SHORT).show();
        }
    } else {
        Toast.makeText(this, "未获取到URL参数", Toast.LENGTH_SHORT).show();
    }
}

3. 必须补充的权限与配置

在AndroidManifest.xml的<manifest>标签内添加网络权限:

<uses-permission android:name="android.permission.INTERNET" />

同时确保WebViewActivity已在Manifest中注册:

<activity android:name=".WebViewActivity" />

最后检查项

  • 确认布局文件webview.xml里确实存在id为webView1的WebView控件。
  • 测试时保证设备有正常网络连接,避免因无网导致的加载错误。

按照这些修改后,你的应用应该就能正常运行,点击按钮会在自定义WebView中打开对应网页啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:05:59