双按钮搭配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
相关产品推荐
相关产品推荐

