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
相关产品推荐
相关产品推荐

