Исключение формата бросающего числа для входной строки "type" Custom List View - PullRequest
0 голосов
/ 28 октября 2019

Я пробовал приведенный ниже код в пользовательском представлении списка. Я пытался заменить тип вызова на «Входящий», «Исходящий» и «пропущенный», он показывает исключение формата номера: для входной строки «тип»

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)));

1 Ответ

1 голос
/ 28 октября 2019

CallLog.Calls.TYPE - это имя столбца, а не целое число, поэтому его нельзя проанализировать как единое целое.

В соответствии с этой строкой ваша база данных также содержит строку для типа, а не число.

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

Если вы хотите CallLogData сохранить строковое значение типа, вам следует переместить регистр переключателя вверх и, возможно, вместо этого использовать getInt из базы данных, поскольку, похоже, именноtype is ... Хотя, вы должны обратиться к своему 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));

Кроме того, если вы сами добавили / создали значения базы данных, вы можете изменитьтип целое число в строковое значение, а не во время запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...