点击图片按钮跳转Activity2加载WebView时应用崩溃求助
问题排查与修复方案
核心问题分析
静态常量未初始化导致空指针
Activitylink中定义的public static String website未赋值,导致传递Intent参数时使用null作为Key,接收时websiteURL为空,调用webview.loadUrl(null)直接触发空指针异常,引发闪退。按钮点击事件重复绑定
XML中已通过android:onClick="openLinkInBrowser"绑定点击事件,但openLinkInBrowser方法内又额外设置OnClickListener,导致第一次点击仅完成监听绑定,第二次点击才会执行跳转逻辑,同时冗余代码可能引发未知问题。Activity未注册(潜在问题)
若Activitylink未在AndroidManifest.xml中声明,启动时会抛出ActivityNotFoundException,同样会导致闪退。
具体修复代码
1. 修复Activitylink的常量定义与WebView逻辑
package com.example.gptapp; import android.content.Intent; import android.os.Bundle; import android.webkit.WebView; import androidx.appcompat.app.AppCompatActivity; public class Activitylink extends AppCompatActivity { // 初始化静态常量作为Intent参数Key,遵循命名规范 public static final String WEBSITE = "EXTRA_WEBSITE"; private String websiteURL; public WebView webview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activitylink); Intent intent = getIntent(); websiteURL = intent.getStringExtra(WEBSITE); // 增加空值判断,避免空指针 if (websiteURL != null && !websiteURL.isEmpty()) { webview = findViewById(R.id.webView); webview.getSettings().setJavaScriptEnabled(true); webview.getSettings().setDomStorageEnabled(true); webview.setOverScrollMode(WebView.OVER_SCROLL_NEVER); webview.loadUrl(websiteURL); } } }
2. 简化MainActivity的点击事件逻辑
选择以下两种方式之一:
方式一:保留XML的onClick绑定
package com.example.gptapp; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.ImageButton; public class MainActivity extends AppCompatActivity { private ImageButton button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } // 直接调用跳转方法,移除重复的监听绑定 public void openLinkInBrowser(View view) { sendData(); } public void sendData(){ String url = "https://youtube.com"; Intent intent = new Intent(MainActivity.this, Activitylink.class); // 使用初始化后的常量作为参数Key intent.putExtra(Activitylink.WEBSITE, url); startActivity(intent); } }
方式二:移除XML的onClick,在代码中绑定监听
package com.example.gptapp; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.ImageButton; public class MainActivity extends AppCompatActivity { private ImageButton button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化按钮并绑定监听 button = findViewById(R.id.imageButton); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendData(); } }); } public void sendData(){ String url = "https://youtube.com"; Intent intent = new Intent(MainActivity.this, Activitylink.class); intent.putExtra(Activitylink.WEBSITE, url); startActivity(intent); } }
(若选方式二,需删除XML中ImageButton的android:onClick="openLinkInBrowser"属性)
3. 确保Activity在Manifest中注册
在AndroidManifest.xml的<application>标签内添加:
<activity android:name=".Activitylink" />
内容的提问来源于stack exchange,提问作者simla
相关产品推荐
相关产品推荐

