Как получить строку из SQLite в модель с пользовательскими объектами? - PullRequest
0 голосов
/ 01 июля 2019

Я изо всех сил пытаюсь получить строку из SQLite.

Вот мой фрагмент DatabaseHelper:

public Expense getExpense(long id) {

        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.query(EXPENSE_TABLE_NAME,
                new String[]{EXPENSE_COLUMN_ID, EXPENSE_COLUMN_TYPE, EXPENSE_COLUMN_PERSON_IN_DEBT, EXPENSE_COLUMN_AMOUNT,
                        EXPENSE_COLUMN_DESCRIPTION, EXPENSE_COLUMN_TIMESTAMP, EXPENSE_COLUMN_IS_PAID},
                EXPENSE_COLUMN_ID + "=?",
                new String[]{String.valueOf(id)}, null, null, null, null);

        if (cursor != null)
            cursor.moveToFirst();

        assert cursor != null;
        Expense expense = new Expense(
                cursor.getInt(cursor.getColumnIndex(EXPENSE_COLUMN_ID)),
  ERROR HERE -> (ExpenseType)cursor.getString(cursor.getColumnIndex(EXPENSE_COLUMN_TYPE)),
  ERROR HERE -> (Person)cursor.getString(cursor.getColumnIndex(EXPENSE_COLUMN_PERSON_IN_DEBT)),
                cursor.getDouble(cursor.getColumnIndex(EXPENSE_COLUMN_AMOUNT)),
                cursor.getString(cursor.getColumnIndex(EXPENSE_COLUMN_DESCRIPTION)),
                cursor.getString(cursor.getColumnIndex(EXPENSE_COLUMN_TIMESTAMP)),
                cursor.getInt(cursor.getColumnIndex(EXPENSE_COLUMN_IS_PAID))); // true for 1

        cursor.close();
        db.close();
        return expense;
    }

Конструктор в модели расходов выглядит следующим образом:

public Expense(int id, ExpenseType expenseType, Person person, Double amount, String description, String timestamp, int isPaid).

Я получаю ошибку приведения к линиям, которые я пометил с ошибкой выше

"Необратимый тип; невозможно преобразовать 'java.lang.String' в 'com ... model.ExpenseType"

как я могу сделать эту работу?В базе данных объекты expenseType и person добавляются как строки.

1 Ответ

0 голосов
/ 01 июля 2019

С этими строками:

(ExpenseType)cursor.getString(cursor.getColumnIndex(EXPENSE_COLUMN_TYPE)),
(Person)cursor.getString(cursor.getColumnIndex(EXPENSE_COLUMN_PERSON_IN_DEBT))

вы пытаетесь привести 2 строки к объекту типа ExpenseType и объекту типа Person, и это невозможно сделать.
Вы не публиковали классы ExpenseType и Person, поэтому я не знаю их конструкторов, но если их конструкторы принимают строку в качестве аргумента, возможно, вы можете сделать это:

new ExpenseType(cursor.getString(cursor.getColumnIndex(EXPENSE_COLUMN_TYPE))),
new Person(cursor.getString(cursor.getColumnIndex(EXPENSE_COLUMN_PERSON_IN_DEBT)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...