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

调用另一个类中方法为Activity的EditText设置文本出现空指针异常

问题产生原因

你出现空指针的核心原因是你手动创建了新的Activity实例,而非使用当前正在运行的原有Activity实例:

  • Android的Activity实例由系统负责创建、管理生命周期,只有走了系统触发的onCreate生命周期的Activity,才会完成布局加载、控件初始化(你的date控件就是在系统触发的onCreate里通过findViewById赋值的)
  • 你在DateDialog的SetDateString方法里写的Activity act= new Activity()是你自己手动new的空实例,这个实例从未走onCreate流程,内部的date控件完全没有被赋值,调用它的setdate方法时访问date控件自然会抛出空指针异常。
解决方法

你只需要把当前正在运行的Activity实例传给DateDialog即可,修改步骤如下:

  1. 首先修改DateDialog类,增加构造方法接收Activity实例,保存为成员变量:
public class DateDialog {
    // 增加成员变量保存原有Activity实例,替换YourActivityName为你实际的Activity类名
    private YourActivityName mActivity;
    // 修改构造方法接收参数
    public DateDialog(YourActivityName activity) {
        this.mActivity = activity;
    }

    public void SetDateString() {
        String name = "bla bla bla";
        // 直接用传入的原有Activity实例调用方法,不要自己new Activity
        mActivity.setdate(name);
    }
}
  1. 修改Activity中初始化DateDialog的代码,传入当前Activity实例:
protected void onCreate(Bundle savedInstanceState) {
    date = findViewById(R.id.date_input);
    date.setOnClickListener(this);
    // 初始化时传入当前正在运行的Activity实例(this就是当前Activity)
    date_class = new DateDialog(this);
    // ........其他原有代码
}

补充优化:如果担心持有Activity实例导致内存泄漏,可以用弱引用包裹Activity实例:

public class DateDialog {
    private WeakReference<YourActivityName> mActivityRef;
    public DateDialog(YourActivityName activity) {
        this.mActivityRef = new WeakReference<>(activity);
    }

    public void SetDateString() {
        YourActivityName activity = mActivityRef.get();
        if (activity != null) {
            String name = "bla bla bla";
            activity.setdate(name);
        }
    }
}

内容的提问来源于stack exchange,提问作者Chris Ed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 23:36:04