输入字符串“类型”自定义列表视图的抛出数字格式异常

问题描述 投票:0回答:1

[我尝试在自定义列表视图中尝试以下代码。我尝试将呼叫类型替换为“传入”,“传出”和“未接”,它显示数字格式异常:对于输入字符串“类型”

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)));
java android android-sqlite
1个回答
1
投票

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

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

CallLog.Calls.TYPE

如果要cons.setType(cr.getString(cr.getColumnIndex(CallLog.Calls.TYPE))); 存储类型的字符串值,则应将开关大小写上移,并可能改用数据库中的CallLogData,因为这似乎是类型...。尽管,您应该参考getInt语句进行验证。

CREATE TABLE

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

String type;
int typeIdx = cr.getColumnIndex(CallLog.Calls.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);

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

© www.soinside.com 2019 - 2024. All rights reserved.