【问题标题】:Using content values to convert string to integer使用内容值将字符串转换为整数
【发布时间】:2014-05-18 06:13:26
【问题描述】:

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

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

- 来自自定义适配器

        phone1 = (Integer) cv.getAsInteger(Contacts.PHONE);

- 来自连接器

【问题讨论】:

  • 哪一行抛出NullPointerException?能否请您从 LogCat 发布错误?
  • 这是行 'phone1 = (Integer) cv.getAsInteger(Contacts.PHONE);'我将使用 logcat 错误更新帖子
  • 这里的一个明确问题是,您声明了一组new ContentValues();,然后在很明显此时没有添加任何内容时尝试获取值Contacts.PHONE。这可能是您的错误。
  • 您正在创建一个新的简历...然后您尝试获取一个值...显然它为空,因为您之前没有放入任何内容...编辑:电话太慢
  • 所以最好不要在连接器类中执行此操作,最好转换为 int 并在另一个类中递增?

标签: java android sqlite


【解决方案1】:

这部分在您的代码中实际上没有意义:

ContentValues cv = new ContentValues();
int phone1 = (Integer) cv.getAsInteger(Contacts.PHONE);

您正试图从您刚刚创建的ContentValues 中获取Contacts.PHONE

也许你想做这样的事情:

cv.put(Contacts.PHONE, Integer.parseInt(phone) + 1);

如果你清理这部分,NullPointerException 可能会自然消失。

此外,使用? 占位符作为参数更新表比将它们放入查询字符串中更安全,如下所示:

db.update(Contacts.TABLE, cv, Contacts.ID + " = ?", new long[]{id});

【讨论】:

  • 啊,我确实错误地使用了我的新ContentValues。我打算将该字段作为字符串保存在数据库中,但将 textveiw 中的字符串转换为 int、++,然后保存它的内容。
猜你喜欢
  • 2017-04-23
  • 2017-06-11
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2016-07-02
  • 2022-12-29
相关资源
最近更新 更多