Android应用使用WebView调用loadUrl方法时强制关闭如何解决
问题原因
应用闪退的核心触发点是空指针异常,具体根因为:
你将WebView控件定义在IntroductionFragment对应的fragment_intro.xml布局中,但MainActivity的onCreate方法加载的是R.layout.activity_main这个Activity级布局,该布局中不存在id为webview的控件,调用findViewById(R.id.webview)会返回null,后续执行webView.getSettings()时直接触发空指针导致应用崩溃。
解决方案
根据你的业务需求选择对应方案即可:
方案1:直接在Activity中展示WebView
将fragment_intro.xml中的WebView控件代码移动到activity_main.xml布局中,保证Activity加载的布局内存在对应id的WebView控件即可。
方案2:在Fragment中展示WebView
把WebView的初始化逻辑从MainActivity转移到IntroductionFragment的onCreateView方法中,参考代码如下:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // 加载Fragment对应的布局 View rootView = inflater.inflate(R.layout.fragment_intro, container, false); // 从Fragment的根布局中查找WebView控件 WebView webView = rootView.findViewById(R.id.webview); // 原有WebView配置逻辑 webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl("https://google.com"); return rootView; }
额外优化建议
为了避免后续WebView使用出现其他问题,可以补充以下配置:
- 配置
WebViewClient避免页面跳转时自动打开系统浏览器:
webView.setWebViewClient(new WebViewClient());
- Android 5.0及以上系统默认禁止HTTP/HTTPS混合内容加载,若你要加载的页面存在混串场景,可按需开启:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); }
- 调试阶段可开启WebView远程调试能力,方便排查页面加载异常:
WebView.setWebContentsDebuggingEnabled(true);
内容的提问来源于stack exchange,提问作者JIN
相关产品推荐
相关产品推荐

