Fechar cursor SQLITE ANDROID

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();
    }
}

}

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.

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?

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

Não retorna nenhum exception quando debuga?