IllegalStateException на курсоре

Обновление Swift 2 Есть новые отказоустойчивые инициализаторы, которые позволяют вам делать это более идиоматичным и безопасным способом (как было отмечено многими ответами, двойное значение NSString не очень безопасно, потому что оно возвращает 0 для значений без номера. Это означает, что doubleValue из "foo" и "0" одинаковы.)

let myDouble = Double(myString)

Это возвращает необязательный параметр, поэтому в случаях, например, в "foo", где doubleValue вернул 0, failable intializer вернет nil. Вы можете использовать guard, if-let или map для обработки Optional<Double>

Исходная запись: вам не нужно использовать конструктор NSString, как предлагает принятый ответ. Вы можете просто нарисовать его так:

(swiftString as NSString).doubleValue
1
задан Zoe 5 March 2019 в 10:36
поделиться

2 ответа

Нашел проблему: Я пытался получить доступ к столбцам, которые не были добавлены в проекты в методе readNumber, и добавление этих проекций решило проблему.

readNumber

    public Cursor readNumber(SQLiteDatabase database) {
    String[] projections = {
            DbContract.ITEMID,
            DbContract.PHONE_NUMBER,
            DbContract.CALL_TYPE,
            DbContract.CALL_DATE,
            DbContract.CALL_DURATION};
    return (database.query(DbContract.TABLE_NAME, projections, null, null, null, null, null));
}
0
ответ дан JeffinJ 5 March 2019 в 10:36
поделиться

В вашей проекции, созданной вызовом readNumber, возвращаются только столбцы id и PHONE_NUMBER. Вероятно, DbContract.ITEMID не равно id, и при попытке поиска DbContract.ITEMID в курсоре он не найден. Чтобы исправить это, вам нужно использовать метод ITEMID в readNumber, что-то вроде:

public Cursor readNumber(SQLiteDatabase database) {
    String[] projections = {DbContract.ITEMID, DbContract.PHONE_NUMBER};
    return (database.query(DbContract.TABLE_NAME, projections, null, null, null, null, null));
}

Другая проблема заключается в том, что вы пытаетесь получить доступ и к другим полям, например: CALL_TYPE, CALL_DATE и т. д.

Итак, чтобы решить проблему, вы также:

  • Не пытайтесь получить поля, которые не являются частью результата.
  • Добавьте необходимые поля и в проекцию.
0
ответ дан dan 5 March 2019 в 10:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: