1
resposta

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

Galera, eu tenho o metodo getAll() que chama pra mim todos os ID e Descrição da tabela X, dentro desse metodo onde trato as exceções possuo o metodo MontarDados.

public List<RotuloFotos> getAll() {

    List<RotuloFotos> ret = new ArrayList<>();

    String selectQuery = "SELECT  " + ID + "," + DESCRICAO + " FROM " + NomeTabela;
    String whereQuery = " WHERE (" + SYNC_MOBILE + " = 'S' OR " + SYNC_MOBILE + " IS NULL)";

    Log.i(LOG, selectQuery + whereQuery);
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor c = db.rawQuery(selectQuery + whereQuery, null);

    try {
        if (c.moveToFirst()) {
            do {
                ret.add(montarDados(c));
            } while (c.moveToNext());
        }
    } catch (Exception e){
        ret = null;
    }

    return ret;
}

Durante o debug do metodo MontarDados, o mesmo está caindo dentro do catch retornando null e a seguinte mensagem aparece dentro do painel de debug

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

Já verifiquei a inicialização do meu cursor e o mesmo já foi feito.

private RotuloFotos montarDados(Cursor c) {

    RotuloFotos td;

    try {
        td = new RotuloFotos();
        td.setRotulosFotosID(c.getLong(c.getColumnIndex(ID)));
        td.setDescricaoRotulo(c.getString(c.getColumnIndex(DESCRICAO)));
        td.setSyncPda(c.getString(c.getColumnIndex(SYNC_MOBILE)));
    } catch (Exception e) {
        td = null;
    }

    return td;

}
1 resposta

Oi, Thailan! Como você está?

Peço desculpas por demorar a te dar um retorno.

Para verificar a origem do erro, você pode fazer um destes métodos:

  • Checar se o cursor foi inicializado corretamente antes de entrar na função montarDados(). Inclusive, é relevante a ordem de execução, então também é importante notar se ela está correta.
  • Se tudo estiver funcionando, você precisa verificar se os valores nulos estão sendo pegos e feitos de modo correto. Se não acontecer, eles irão para a exceção.
  • Observar os parâmetros e se estão sendo repassados de modo correto ao montar os dados.

E também vale ressaltar que para rodar os testes citados acima, você pode usar o comando System.out.printLn(). Assim você terá a visão do valor que está sendo recebido por cada parâmetro. Além disso, você também poderá ver se algum deles está puxando um valor de forma inadequada, incluindo "null", pois eles podem impactar em outros momentos em que você for tratar estas exceções no seu código.

Espero ter ajudado.

Se outra dúvida surgir, sinta-se à vontade para postar no fórum.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software