java - 输入字符串 "type"自定义 ListView 抛出数字格式异常

标签 java android android-sqlite

我已在自定义 ListView 中尝试了以下代码。我尝试将调用类型替换为“传入”、“传出”和“未接”,它显示数字格式异常:对于输入字符串“类型”

assert cr != null;
if (cr.moveToLast()) {
    for (int i = 0; i < cr.getCount(); i++) {
        CallLogData cons = new CallLogData();

        cons.setNumber(cr.getString(cr.getColumnIndex(CallLog.Calls. NUMBER)));
        cons.setType(cr.getString( cr.getColumnIndex(CallLog.Calls. TYPE)));
        callsListView.add(cons);

        cr.moveToPrevious();
    }

    String dir = null;
    int dircode = Integer.parseInt(getString(Integer.parseInt(CallLog.Calls. TYPE)));
    switch (dircode) {
        case CallLog.Calls.OUTGOING_TYPE:
            dir = "OUTGOING";
            break;

            case CallLog.Calls.INCOMING_TYPE:
                dir = "INCOMING";
                break;

            case CallLog.Calls.MISSED_TYPE:
                dir = "MISSED";
                break;
        }

        sb.append("\n  ").append(dir);

    }
cr.close();

这行我收到错误

 int dircode = Integer.parseInt(getString(Integer.parseInt(CallLog.Calls. TYPE)));

最佳答案

CallLog.Calls.TYPE是一个列名,而不是一个整数,因此无法将其解析为一。

根据这一行,您的数据库也保存该类型的字符串,而不是数字。

cons.setType(cr.getString(cr.getColumnIndex(CallLog.Calls.TYPE)));

如果您希望 CallLogData 存储该类型的字符串值,则应将 switch case 向上移动,并且可能使用数据库中的 getInt 来代替,因为这就是看来该类型是...尽管如此,您应该引用 CREATE TABLE 语句来验证这一点。

if (cr.moveToLast()) {
    int numIdx = cr.getColumnIndex(CallLog.Calls.NUMBER);
    int typeIdx = cr.getColumnIndex(CallLog.Calls.TYPE);

    for (int i = 0; i < cr.getCount(); i++) {
        CallLogData cons = new CallLogData();
        cons.setNumber(cr.getString(numIdx));

        String type;
        int callType = cr.getInt(typeIdx);
        switch (callType) {
            case CallLog.Calls.OUTGOING_TYPE:
                type = "OUTGOING";
                break;
            case CallLog.Calls.INCOMING_TYPE:
                type = "INCOMING";
                break;
            case CallLog.Calls.MISSED_TYPE:
                type = "MISSED";
                break;
            default:
                type = "UNKNOWN";
        }
        cons.setType(type);
    }

如果数据库列确实是一个字符串,那么您会需要这个

Integer.parseInt(cr.getString(typeIdx));

此外,如果您自己插入/创建了数据库值,那么您可以将类型整数更改为字符串值,而不是在查询时更改。

关于java - 输入字符串 "type"自定义 ListView 抛出数字格式异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58585669/

相关文章:

android - 如何通过触摸聆听绘制多个圆圈?

android - 无法为我的 ListView 更新数据

android - 如何从 sqlite 数据库中列出表名 -- Android

java - 如何修复android java中的sqliteException

java - 删除双尖括号中的 block 的正则表达式

android - 暂时关闭铃声

java - 收到的每个数据包上都有新的 FileOutputStream 吗?或者保持 FileOutputStream 打开?

android - 如何从android中的soap响应中获取值?

队列集合的 Java 数据结构

java - serialVersionUID = 1L 比生成串行版本 id 更好吗?