Как я могу получить данные из одного поля в переменную из базы данных SQLite? - PullRequest
0 голосов
/ 11 января 2011

Я работаю над своим первым приложением для Android и настроил базу данных SQLite и работаю с ней. Я смог успешно использовать курсор для извлечения некоторых данных и использовать SimpleCursorAdapter, чтобы данные отображались в виде списка.

Сейчас я ищу для извлечения определенного поля и для помещения результата в переменную типа float .Однако все примеры, которые я нахожу в Интернете, похоже, ожидают, что вы будете обрабатывать большие операции поиска с несколькими строками / столбцами, и все они были адаптированы в списки или массивы. Я не могу понять, как просто получить содержимое этого одного поля в переменную.

Я пытался использовать myVariable = cursor.getFloat(0), который, я думаю, идет по правильным линиям, но я не мог 'это тоже не работает.

Каждый раз, когда я запускаю свое приложение, я просто получаю null pointer exception ошибки, я пробовал некоторые блоки try catch, но я новичок во всем этом в целом и не имеллюбой успех в устранении неполадок.Это может быть что-то простое, например, опечатка запроса.

Я включу приведенный ниже фрагмент кода, но любые предложения общего или конкретного характера приветствуются. Спасибо, что нашли время посмотреть.

public void Main(){

    //gets the rowId we put with the intent from Budget.java, sets a default value of -1 'incase.
    selectedRowId = getIntent().getLongExtra("rowId", -1);
    Cursor costCursor= FindBudgetForId(selectedRowId);
    MyText(costCursor, selectedRowId);

}

public Cursor FindBudgetForId(long selectedRowId){

    SQLiteDatabase db = budgetData.getWritableDatabase();
    String rowBudgetQuery = "SELECT BUDGET_AMOUNT FROM CAT_BUD_TAB WHERE _ID="+ selectedRowId;
    Cursor c = db.rawQuery(rowBudgetQuery,null);
    startManagingCursor(c); 
    return c;


}

public void MyText(Cursor costCursor, long selectedRowId){      
    TextView whatDoText=(TextView)this.findViewById(R.id.keypad_text);
    whatDoText.setText("row: " +(String.valueOf(selectedRowId)));
    //set the current  budget amount in the edit text box
    retrievedAmount = costCursor.getFloat(3);
    EditText inputHint=(EditText)this.findViewById(R.id.cost_input);
    inputHint.setText((String.valueOf(retrievedAmount)));

}

Ответы [ 2 ]

4 голосов
/ 11 января 2011

Я считаю, что когда SqliteDatabase#rawQuery возвращает курсор, он изначально позиционируется перед первым результатом.Итак, для того, чтобы действительно прочитать значение из полученного результата (без получения NullPointerExceptionExplosionDeath), вызовите cursor.moveToFirst(), прежде чем вы получите число с плавающей точкой.Я был укушен этим раньше.

1 голос
/ 11 января 2011

Вы можете получить данные как

    Cursor c =//Query;
    int numRows = c.getCount();
if (numRows > 0) 
    {
    c.moveToFirst();
    While(numRows>0) // or for loop
    {
          String strName = c.getString(0);
              Int i = c.getInt(1);
              numRows--;
    }       
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...