Pegar resultado de um Cursor e colocar em uma variavel

Gostaria de saber como posso pegar o resultado de um cursor e colocar em uma variavel String para que eu possa dar um setText em um edit

 public void retorno(){
    AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(actDigitacao.this);
    SQLiteDatabase db = admin.getWritableDatabase();
    Cursor rs = (db.rawQuery("SELECT P.NOMEPRODUTO  FROM PRODUTO P WHERE P.CODBAR='7909189139576'", null));
     String resultado = rs;  /////essa Linha está errada e nao me retorna o resultado da query
    TextView textNomeProduto = (TextView) findViewById(R.id.textNomeProduto);
    textNomeProduto.setText(rs);

Tenta da seguinte forma:

String resultado = rs.getString(rs.getColumnIndex("NOMEPRODUTO"));

Jonathan deu erro ao executar o procedimento
erro:

 java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=49374, result=-1, data=Intent { act=com.google.zxing.client.android.SCAN flg=0x80000 (has extras) }} to activity {com.example.inventario/com.example.inventario.actDigitacao}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 3

Provavelmente não retornou nenhum resultado, tem certeza que existe um produto com este ID?

Esse erro que ele retornou é porquê não encontrou nenhum registro no índice que tentou recuperar…

Faça um teste:

String resultado = "";

if (rs.moveToFirst()) {
    resultado = rs.getString(rs.getColumnIndex("NOMEPRODUTO"));
}

Dessa forma só tentará recuperar o valor caso a consulta tenha retornado informação, isso evita que o erro que tu enviou aconteça novamente!

1 curtida

opa Jonathan tudo blz?
tem um produto com esse ID sim,já até exportei o banco do celular e coloquei no computador para abrir o banco através do SQLiteStudio e rodei a query e tá lá sim

após fazer o procedimento que você me passou a aplicação está retornando esse erro

java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it

mas acredito que daqui já consigo andar sozinho novamente, muito obrigado pela sua ajuda

Edit1: rs vi aqui na net e ninguém tem uma resposta sobre esse erro na aplicação

Altera esse cara aqui para isso:

SQLiteDatabase db = admin.getReadableDatabase();

Cara acabei de testar aqui e consegui resolver no meu select eu tive que apelidar a tabela acabou ficando desse jeito

public void retorno(){
    AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(actDigitacao.this);
    SQLiteDatabase db = admin.getWritableDatabase();
    Cursor rs = (db.rawQuery("SELECT NOMEPRODUTO nome_produto  FROM PRODUTO  WHERE CODBAR='7897534812673'",null)); //aqui eu apelidei a tabela do resultado para nome_produto
    String  resultado = "";
    if (rs.moveToFirst()) {
        resultado = rs.getString(rs.getColumnIndex("nome_produto")); //e coloquei o apelido aqui, acabou resolvendo
    } else {
        alert("Produto não encontrado.");
    }
    TextView textNomeProduto = (TextView) findViewById(R.id.textNomeProduto);
    textNomeProduto.setText(resultado);

por algum motivo estava dando conflito,muito obrigado você me ajudou muito valeuu

1 curtida