Получение значений из курсора - PullRequest
0 голосов
/ 26 августа 2018

У меня действительно странная проблема.

Когда я хочу получить значения из курсора, я использую следующий код.

public Customers getCustomerByCursor(Cursor cursor){
    Customers customer=new Customers();
    cursor.moveToFirst();
    customer.setID(cursor,getInt(cursor.getColumnIndex(CustomersDB.COLUMN_ID)));
    customer.setAccount_name(cursor,getString(cursor.getColumnIndex(CustomersDB.COLUMN_ACCOUNTNAME)));
    customer.setName(cursor.getString(cursor.getColumnIndex(CustomersDB.COLUMN_NAME)));
    customer.setLastname(cursor,getString(cursor.getColumnIndex(CustomersDB.COLUMN_LASTNAME)));
    customer.setAddress(cursor,getString(cursor.getColumnIndex(CustomersDB.COLUMN_ADDRESS)));
    customer.setPhone(cursor,getString(cursor.getColumnIndex(CustomersDB.COLUMN_PHONE)));
    customer.setIsactive(true); customer.setPassword(cursor,getString(cursor.getColumnIndex(CustomersDB.COLUMN_PASSWORD)));
    return customer;
}

Но значения не вводятся в объект правильно или не вводятся вообще.

Например, в приведенном ниже коде возвращается 0, это не правильно.

customer.setID(cursor,getInt(0)));

А в остальных строках не возвращать никаких значений. Может кто-нибудь помочь, пожалуйста?

1 Ответ

0 голосов
/ 27 августа 2018

customer.setID(cursor,getInt(cursor.getColumnIndex(CustomersDB.COLUMN_ID)));

Скорее всего, должно быть customer.setID(cursor.getInt(cursor.getColumnIndex(CustomersDB.COLUMN_ID)));

т.е. getInt - это открытый метод объекта Cursor, поэтому для вызова курсора вы кодируете имя объекта курсора, за которым следует полная остановка, за которой следует метод getInt, например,

cursor.getInt(column_offset_as_an_integer) // e.g. cursor.getColumnIndex(column_name_as_a_string) will return the column offset as an integer (if found)

Не следует также предполагать, что метод Cursor moveToFirst всегда перемещается в первую строку, как если бы строк не было, он не может перемещаться в первую строку. Вы всегда должны проверять возвращаемое значение, логическое значение, которое будет истинным, если движение может быть сделано, если нет, то оно будет ложным.

Таким образом, ваш код должен выглядеть так: -

public Customers getCustomerByCursor(Cursor cursor){

    Customers customer=new Customers();
    if (cursor.moveToFirst()) {
        customer.setID(cursor.getInt(cursor.getColumnIndex(CustomersDB.COLUMN_ID)));
        customer.setAccount_name(cursor.getString(cursor.getColumnIndex(CustomersDB.COLUMN_ACCOUNTNAME)));
        customer.setName(cursor.getString(cursor.getColumnIndex(CustomersDB.COLUMN_NAME)));
        customer.setLastname(cursor.getString(cursor.getColumnIndex(CustomersDB.COLUMN_LASTNAME)));
        customer.setAddress(cursor.getString(cursor.getColumnIndex(CustomersDB.COLUMN_ADDRESS)));
        customer.setPhone(cursor.getString(cursor.getColumnIndex(CustomersDB.COLUMN_PHONE)));
        customer.setIsactive(true);
        customer.setPassword(cursor.getString(cursor.getColumnIndex(CustomersDB.COLUMN_PASSWORD)));
    }
    return customer;
}
  • Принимая во внимание, что в случае, когда курсор не содержит строк, возвращенный объект Customers не будет иметь никаких установленных значений. Скорее всего, вы проверили бы возвращенный объект Customers, чтобы проверить наличие таких случаев.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...