java数据库为什么删除异常_java – 从SQL数据库中删除条目后出现Nullpointer异常

我正在开发一个用于机器人的应用程序,用户可以在其中定义机器人稍后将从设备中获取的打孔组合.为了让用户能够存储这些培训,我定义了一个“培训”类,其中包含培训的ID,名称和组合.此培训稍后保存在数据库中,我已为此编写了

DatabaseHandler类.添加和显示数据工作正常,但每当我想用以下方法删除条目时:

public void deleteTraining(Training training) {

SQLiteDatabase db = this.getWritableDatabase();

db.delete(TABLE_TRAININGS, KEY_ID + " = ?",

new String[] { String.valueOf(training.getID()) });

db.close();

}

然后尝试再次填充我的GridView(由GridAdapter类处理),我得到一个Nullpointer异常

java.lang.NullPointerException: Attempt to read from field ‘java.lang.String com.noeth.tobi.mcrobektrainingsplaner.Training._name’ on a null object reference

at com.noeth.tobi.mcrobektrainingsplaner.GridAdapter.getView(GridAdapter.java:50)

GridAdapter的getView方法:

public View getView(int position, View convertView, ViewGroup parent) {

if (convertView == null) {

// if it's not recycled, initialize some attributes

btn = new Button(context);

btn.setLayoutParams(new GridView.LayoutParams(370, 350));

btn.setPadding(2,100,2,100);

btn.setOnClickListener(new CustomOnClickListener(position, context));

btn.setOnLongClickListener(new CustomOnLongClickListener(position, context, btn));

}

else {

btn = (Button) convertView;

}

btn.setText(db.getTraining(position)._name); //Here the programm throws a Nullpointer Exception AFTER deleting an entry from the database

btn.setTextColor(Color.WHITE);

btn.setBackgroundResource(R.drawable.button_border);

btn.setTag("not_activated");

btn.setId(position);

return btn;

}

我认为它必须与删除的训练的id有关,因为循环只是遍历所有id所以我写了一个方法recalcIDs,它重新计算删除训练后的每个项目的id:

recalcIDs

public void recalcIDs(){

int k = 1;

int subtract = 1;

int id;

Training training;

for(int i = deleted.get(0)+1; i < db.getTrainingCount(); i++){

if(deleted.size() > 1){

if(i < deleted.get(k)){

training = db.getTraining(i);

id = training.getID();

training.setID(id-subtract);

}

else{

k+=1;

subtract+=1;

}

}

else{

training = db.getTraining(i);

id = training.getID();

training.setID(id-subtract);

}

}

}

但是,这并没有解决它.

重新安装应用程序并从一个全新的数据库开始时,Everythings再次运行.

有没有人知道我做错了什么?

P.S.:这是getTraining方法,它找不到名称:

Training getTraining(int id) {

SQLiteDatabase db = this.getReadableDatabase();

Training training;

Cursor cursor = db.query(TABLE_TRAININGS, new String[] { KEY_ID,

KEY_NAME, KEY_SK}, KEY_ID + "=?",

new String[] { String.valueOf(id) }, null, null, null, null);

if (cursor != null && cursor.moveToFirst()){

training = new Training(Integer.parseInt(cursor.getString(0)),

cursor.getString(1), cursor.getLong(2));

cursor.close();

}

else{

training = null;

Toast.makeText(con,"Couldn't find any training sessions!", Toast.LENGTH_LONG).show();

}

// return training

return training;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值