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

Android Studio向Workouts模型插入数据时遇空指针异常求助

解决Workouts对象NullPointerException问题

从你的Logcat日志里能一眼定位到问题核心:NullPointerException——你在调用workout.setId(0)时,workout对象根本没被实例化,处于null状态,自然没法调用它的方法。

问题根源分析

在你的MainActivity的insert方法中,你直接使用了workout变量,但从头到尾都没通过new关键字创建它的实例。Java里引用类型的变量默认值是null,直接调用null对象的方法必然触发空指针异常。

修复方案

只需要在调用setId方法前,先创建Workouts类的实例即可,修改后的insert方法如下:

public void insert( View v ) { 
    String description = editDescription.getText( ).toString( ); 
    String weightString = editWeight.getText( ).toString( ); 
    String repsString = editReps.getText( ).toString( ); 
    try { 
        int weight = Integer.parseInt(weightString); 
        int reps = Integer.parseInt(repsString); 
        // 关键步骤:实例化Workouts对象
        Workouts workout = new Workouts();
        workout.setId(0);
        workout.setDescription(description);
        workout.setWeight(weight);
        workout.setReps(reps);
        myDb.insert(workout); 
        Toast.makeText( this, "Workout added", Toast.LENGTH_SHORT ).show( ); 
    } catch( NumberFormatException nfe ) { 
        Toast.makeText( this, "Number error", Toast.LENGTH_LONG ).show( ); 
    } 
}

额外优化建议

如果workout是MainActivity的成员变量,你也可以在Activity的onCreate阶段提前初始化,避免重复创建对象:

private Workouts workout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 提前初始化成员变量
    workout = new Workouts();
    // 其他视图初始化操作...
}

这样后续在insert方法里就能直接复用这个已初始化的对象了。

内容的提问来源于stack exchange,提问作者Charlie Batista

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:24:56