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

点击图片按钮跳转Activity2加载WebView时应用崩溃求助

问题排查与修复方案

核心问题分析

  1. 静态常量未初始化导致空指针
    Activitylink中定义的public static String website未赋值,导致传递Intent参数时使用null作为Key,接收时websiteURL为空,调用webview.loadUrl(null)直接触发空指针异常,引发闪退。

  2. 按钮点击事件重复绑定
    XML中已通过android:onClick="openLinkInBrowser"绑定点击事件,但openLinkInBrowser方法内又额外设置OnClickListener,导致第一次点击仅完成监听绑定,第二次点击才会执行跳转逻辑,同时冗余代码可能引发未知问题。

  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:05:01