我目前正在使用教程中使用的项目,该项目在列表视图中显示联系人。使用数据库中的所有字段并将其另存为字符串。自定义适配器类用于编辑和删除按钮 - 按项显示在列表视图上的按钮。单击编辑将导致单独的活动,其中将解析该记录的详细信息。
我添加了另一个按钮,我想在点击时更新记录并重新加载活动。当您按下按钮时,它会调用connector
方法中的方法:
public void updateContact(long id, String name, String phone, String mail,
String fb, byte[] blob) {
ContentValues cv = new ContentValues();
cv.put(Contacts.NAME, name);
cv.put(Contacts.PHONE, phone);
cv.put(Contacts.MAIL, mail);
cv.put(Contacts.FB, fb);
cv.put(Contacts.IMAGE, blob);
db = sqlHp.getWritableDatabase();
db.update(Contacts.TABLE, cv, Contacts.ID + "=" + id, null);
db.close();
}
我希望phone
将字符串转换为整数,将值递增1,然后使用contentvalues作为字符串保存。这是我尝试过的:
public void updateContact(long id, String name, String phone,
String mail, String fb, byte[] blob) {
ContentValues cv = new ContentValues();
cv.put(Contacts.NAME, name);
int phone1 = 0;
phone1 = (Integer) cv.getAsInteger(Contacts.PHONE);
phone1++;
phone = String.valueOf(phone1);
cv.put(Contacts.PHONE, phone);
cv.put(Contacts.MAIL, mail);
cv.put(Contacts.FB, fb);
cv.put(Contacts.IMAGE, blob);
db = sqlHp.getWritableDatabase();
db.update(Contacts.TABLE, cv, Contacts.ID + "=" + id, null);
db.close();
}
这给了我一个null pointer exception
错误。我不知道从哪里开始。
这是保存onclick方法的自定义适配器的方法
setPresent = (ImageButton) v.findViewById(R.id.setPresent);
setPresent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sqlCon.updateContact(id, name, phone, email, fb, image);
Intent intent = new Intent(context, MyContactsActivity.class)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
当我单击此按钮时,会发生空指针异常错误。这些是它标记的行:
sqlCon.updateContact(id, name, phone, email, fb, image);
- 来自customadapter
和
phone1 = (Integer) cv.getAsInteger(Contacts.PHONE);
- 来自连接器
答案 0 :(得分:1)
这部分在您的代码中没有任何意义:
ContentValues cv = new ContentValues();
int phone1 = (Integer) cv.getAsInteger(Contacts.PHONE);
您正试图从刚刚创建的Contacts.PHONE
获取ContentValues
。
也许你想做这样的事情:
cv.put(Contacts.PHONE, Integer.parseInt(phone) + 1);
如果你清理这部分,NullPointerException
可能会自然消失。
此外,使用参数的?
占位符更新表更安全,而不是将它们放在查询字符串中,如下所示:
db.update(Contacts.TABLE, cv, Contacts.ID + " = ?", new long[]{id});