У меня есть метод для поиска определенного элемента, но когда я использую этот код и пытаюсь использовать возвращаемый объект, я получаю NullPointerException
public Obra buscarInfoObra(String filtro) {
SQLiteDatabase db = helper.getReadableDatabase();
Obra obraSelecionada = null;
Cursor cursor = db.rawQuery("SELECT * FROM " +BancoDadosHelper.TABELA_OBRA+ " WHERE "+BancoDadosHelper.COLUNA_NUM_OBRA + "=" +filtro, null);
if (cursor.moveToFirst()){
String numObra = cursor.getString(cursor.getColumnIndex(BancoDadosHelper.COLUNA_NUM_OBRA));
int anoObra = cursor.getInt(cursor.getColumnIndex(BancoDadosHelper.COLUNA_ANO_OBRA));
String descObra = cursor.getString(cursor.getColumnIndex(BancoDadosHelper.COLUNA_DESCRICAO_OBRA));
String jurisdicionado = cursor.getString(cursor.getColumnIndex(BancoDadosHelper.COLUNA_JURISDICIONADO));
String tipoObra = cursor.getString(cursor.getColumnIndex(BancoDadosHelper.COLUNA_TIPO_OBRA));
String tipoObjeto = cursor.getString(cursor.getColumnIndex(BancoDadosHelper.COLUNA_TIPO_OBJETO));
String endereco = cursor.getString(cursor.getColumnIndex(BancoDadosHelper.COLUNA_ENDERECO_OBRA));
obraSelecionada = new Obra(numObra,anoObra,descObra,jurisdicionado,tipoObra,tipoObjeto,endereco);
}
cursor.close();
db.close();
return obraSelecionada;
Что я делаю неправильно?
[EDIT] Это не дубликат, я знаю, что такое исключение NullPointerException, но я не понимаю, почему я получаю это исключение. Я уже пытаюсь помещать существующие данные непосредственно в код, но все равно получаю NullPointer..
Вы должны проверить нуль на курсор, затем использовать, а затем закрыть.
public Obra buscarInfoObra(String filtro) {
SQLiteDatabase db = helper.getReadableDatabase();
Obra obraSelecionada = null;
Cursor cursor = db.rawQuery(...);
if (cursor != null) {
if (cursor.moveToFirst()) {
// use cursor
obraSelecionada = ...
}
cursor.close();
}
db.close();
return obraSelecionada;
}
Однако нулевые курсоры могут быть сформированы из плохих операторов sql. Вам нужно обернуть строку ваших равных кавычками, например
"SELECT * FROM table_name WHERE column_name = 'some value'"
у вас есть кое-что, что больше похоже на это
"SELECT * FROM table_name WHERE column_name = some value"
так что это должно исправить
Cursor cursor = db.rawQuery("SELECT * FROM " + BancoDadosHelper.TABELA_OBRA + " WHERE " + BancoDadosHelper.COLUNA_NUM_OBRA + "=" + "'" + filtro + "'", null);
Боковой наконечник, вы должны написать свой запрос, как это, вместо этого, чтобы избежать инъекции sql
db.query(BancoDadosHelper.TABELA_OBRA, null,
BancoDadosHelper.COLUNA_NUM_OBRA + "=?",
new String[] { filtro },
null, null, null);
надеюсь, это поможет
Попробуйте таким образом
public RentMasterModel getRent(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_RENTMASTER, new String[]{KEY_RENTMASTER_ITEMID,
KEY_RENTMASTER_RENTHOUR, KEY_RENTMASTER_RENTDAY, KEY_RENTMASTER_RENTWEEK, KEY_RENTMASTER_RENTMONTH}
, KEY_RENTMASTER_ITEMID + "=?",
new String[]{String.valueOf(id)}, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
RentMasterModel rm = new RentMasterModel(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getString(4));
// return contact
return rm;
}
здесь добавьте значение курсора в класс bean