添加webView.loadUrl("https://www.youtube.com")至OnClickListener后应用频繁崩溃重启问题
解决WebView空指针异常的问题
嘿,这个问题我之前开发浏览器类App时也踩过坑!咱们先拆解一下错误原因:
你看到的java.lang.NullPointerException: Attempt to invoke virtual method 'void android.webkit.WebView.loadUrl(java.lang.String)' on a null object reference,本质是你在MainActivity里直接调用了另一个Activity的WebView方法,但这时候目标Activity(url_load_activity)还没启动,它的WebView根本没完成初始化,对象自然是null,所以一调用就崩了。
正确的实现方式
我们需要通过Intent传递要加载的URL,让目标Activity自己完成WebView的初始化和URL加载,步骤如下:
1. 在MainActivity的点击事件里传递URL
把你要加载的URL放到Intent的额外参数里,然后启动目标Activity:
// 注意:Java类名要遵循大驼峰命名规范,建议把url_load_activity改成UrlLoadActivity Intent yt = new Intent(MainActivity.this, UrlLoadActivity.class); // 传递URL参数,"TARGET_URL"是自定义的key,后面要对应上 yt.putExtra("TARGET_URL", "https://www.youtube.com"); startActivity(yt);
2. 在目标Activity(UrlLoadActivity)里加载URL
在目标Activity的onCreate方法中,先初始化WebView,再获取Intent传递的URL并加载:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.url_load_activity); // 1. 初始化WebView(替换成你xml里WebView的实际id) WebView webView = findViewById(R.id.your_webview_id); // 2. 给WebView做基础配置(比如启用JavaScript,按需添加) WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); // 3. 获取Intent传递的URL并加载 String targetUrl = getIntent().getStringExtra("TARGET_URL"); if (targetUrl != null && !targetUrl.isEmpty()) { webView.loadUrl(targetUrl); } }
额外提醒
- 记得修改Activity类名:
url_load_activity不符合Java命名规范,改成UrlLoadActivity(同时要修改AndroidManifest.xml里的对应声明),这能避免很多潜在的命名混淆问题。 - 如果不同ImageView要加载不同URL,只需要在各自的点击事件里传递对应的URL即可,目标Activity的逻辑不用改,非常灵活。
这样修改后,跳转和URL加载就能正常工作啦!
内容的提问来源于stack exchange,提问作者Savithu
相关产品推荐
相关产品推荐

