Fechar cursor SQLITE ANDROID

4 respostas
programação
DouglasSoeiro

Ola estou fazendo um projeto com SQLITE no android e estpu tendo um erro sobre o cursor no caso andei pesquisando e parece que tenho que usar o cursor.close(); mas não sei o modo certo de usa-lo , pfv me ajudem

TENTEI DESSE MODO

==========================================================

package com.example.douglas.sqlite.dao;

import android.content.ContentValues;

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

import com.example.douglas.sqlite.modelo.Pessoa;

import java.util.ArrayList;

/**

  • Created by Douglas on 15/01/2018.
    */
public class PessoaDao extends SQLiteOpenHelper {

private static final String NOME_BANCO = DBPessoa.db;

private static final int VERSION = 1;

private static final String TABELA = pessoa;

private static final String ID = id;

private static final String Nome = nome;

private static final String Endereço = endereço;

private static final String Telefone = telefone;

private static final String Idade = idade;
public PessoaDao(Context context) {
    super(context, NOME_BANCO, null, VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    String sql = "CREATE TABLE"+TABELA+" ( "+
            " "+ID+" INTEGER PRIMARY KEY AUTOINCREMENT, " +
            " "+Nome+" TEXT ,"+Idade+" TEXT, "+
            " "+Endereço+ "TEXT ,"+Telefone+" TEXT );";
    db.execSQL(sql);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    String sql = "DROP TABLE IS EXIST"+TABELA;
    db.execSQL(sql);
    onCreate(db);

}
public long salvarpessoa(Pessoa p){
    ContentValues values = new ContentValues();
    long retornoDB;
    values.put(Nome,p.getNome());
    values.put(Idade,p.getIdade());
    values.put(Endereço,p.getEndereço());
    values.put(Telefone,p.getTelefone());

    retornoDB = getWritableDatabase().insert(TABELA,null,values);


    return retornoDB;
}

public ArrayList<Pessoa> selectAllPessoa(){

    String [] coluns = {ID,Nome,Idade,Endereço,Telefone};



         Cursor cursor = getWritableDatabase().query(TABELA, coluns, null, null, null, null, null, null);



        ArrayList<Pessoa> listPessoa = new ArrayList<Pessoa>();
        while (cursor.moveToNext()) {
            Pessoa p = new Pessoa();

            p.setId(cursor.getInt(0));
            p.setNome(cursor.getString(1));
            p.setIdade(cursor.getString(2));
            p.setEndereço(cursor.getString(3));
            p.setTelefone(cursor.getString(4));

            listPessoa.add(p);

        }

            //cursor.close();
            return listPessoa;

}
public void closeCursor ( Cursor cursor ) {
    if (cursor != null) {
        cursor.close();
    }
}

}

4 Respostas

javaflex

Fecha logo após terminar de usar. Seria no lugar que você deixou comentado mesmo.

Não precisa desse método closeCursor. Na prática sempre vai escrever uma linha de qualquer forma. E se é pra fechar o cursor ele sempre deve existir.

DouglasSoeiro

Ah obg , Mas no caso no comentário eu já tinha testando mas não estava dando certo , Aí criei o método para ver se daria certo mas não deu , Pode me ajudae?

DouglasSoeiro

No caso quando executo o programa uma mensagem Na tela aparece e fecha o programa (“O programa Parou”)
Mas quando retiro a parte do cursor funciona normalmente, fui pesquisando um pouco e descobri que tenho que usar o cursor.close() mas como eu vi e tentei usar não está dando certo

javaflex

Não retorna nenhum exception quando debuga?

Criado 16 de janeiro de 2018
Ultima resposta 16 de jan. de 2018
Respostas 4
Participantes 2