Ошибка получения значения курсора в виде строки

У меня есть база данных SQLite с четырьмя столбцами

  1. Я БЫ
  2. название
  3. симптомы
  4. Лекарственное средство

Код моего помощника

        public Cursor getMedicine(String symptom1)
        {

            SQLiteDatabase db=helper.getReadableDatabase();
            Cursor c =  db.rawQuery("SELECT medicine FROM diseases WHERE symptoms = ?;",new String[] {symptom1});
            c.moveToFirst();
            return c;
        }

А вот код моего класса активности:

    String med = "";

    Disp_med_DBHelper medicalHelp = new Disp_med_DBHelper(this);
    medicalHelp.open();
    medicalHelp.getMedicine(Value1);
    med = medicalHelp.getMedicine(Value1).toString();

    t1.setText(med);
    medicalHelp.close();

Где t1 - это мое текстовое поле, а Value1 - строка, которую нам нужно отправить помощнику базы данных для запроса к базе данных.

Когда я проверяю вывод в моем текстовом поле, я получаю следующий вывод

    android.database.sqlire.SQLiteCursor@4174986

Что я должен сделать, чтобы это исправить?

3 ответа

Решение

Метод toString () возвращает строковое представление объекта Cursor. Вы должны использовать метод getString (int column) из класса Cursor.

Примерно так: med = medicalHelp.getMedicine(Value1).getString(0);

Дополнительная информация: https://developer.android.com/reference/android/database/Cursor.html

Используйте этот метод вместо:

  public String getMedicine(String symptom1) {
    SQLiteDatabase db = helper.getWritableDatabase();
    Cursor c = db.rawQuery("SELECT medicine FROM diseases WHERE symptoms = ?;", new String[]{symptom1});
    if (c.moveToFirst()) {
        return c.getString(c.getColumnIndex("medicine"));
    }
    return null;
}

а затем в вашей деятельности:

med = medicalHelp.getMedicine(Value1)
if(med!=null){
   t1.setText(med);
}

Даже если курсор содержит только одно значение, он все еще ведет себя как курсор, который может иметь несколько столбцов и несколько строк. Таким образом, вы должны пойти в первый ряд (с moveToFirst(), что может привести к сбою), и прочитайте значение из первого столбца (с getString(0)).

Тем не менее, для этой простой ситуации есть вспомогательная функция, которая позволяет избежать необходимости возиться с курсором:

    public Cursor getMedicine(String symptom1) {
        SQLiteDatabase db = helper.getReadableDatabase();
        return DatabaseUtils.stringForQuery(db,
                    "SELECT medicine FROM diseases WHERE symptoms = ?;",
                    new String[]{ symptom1 });
    }
Другие вопросы по тегам