使用内容值将字符串转换为整数

时间:2014-04-05 23:12:28

标签: java android sqlite

我目前正在使用教程中使用的项目,该项目在列表视图中显示联系人。使用数据库中的所有字段并将其另存为字符串。自定义适配器类用于编辑和删除按钮 - 按项显示在列表视图上的按钮。单击编辑将导致单独的活动,其中将解析该记录的详细信息。

我添加了另一个按钮,我想在点击时更新记录并重新加载活动。当您按下按钮时,它会调用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);

- 来自连接器

1 个答案:

答案 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});