Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Problema com Cursor

hoje coloco tudo dentro de um list, segue um exemplo.


public List<UsuarioDTO> getAll() {

try {
SQLiteDatabase db = new DBHelper(ctx).getWritableDatabase();
List<UsuarioDTO> lista = new ArrayList<UsuarioDTO>();
Cursor c = db.query(table_name, colunas, null, null, null, null,
null);

while (c.moveToNext()) {
lista.add(new UsuarioDTO(c));
}

c.close();
close(db);
return lista;

} catch (SQLException e) {
Log.e("ERRO SQL", "Erro ao buscar Usuario: " + e.toString());
return null;
}
}


2012/7/5 Gabriel Augusto <gabrielaugustodm@gmail.com>
Pessoal,

Estou tendo alguns problemas com finalização de banco ou de cursor (ainda não consegui identificar).

Acredito que o problema esteja nessa função, que seleciona todos e retorna um próprio cursor. Não posso fecha-lo antes de retorna-lo. Segue a função:

// Retorna um cursor com todos os registros
public Cursor getCursor() {
try {
// select * from registro
Cursor cursor =  db.query(NOME_TABELA, Registro.COLUNAS, null, null, null, null, null, null);
return cursor;
} catch (SQLException e) {
Log.i(CATEGORIA, "Erro ao buscar os registros: " + e.toString());
return null;
}
}

E o log:

07-05 15:38:42.711: E/Database(3332): close() was never explicitly called on database '/data/data/com.gpslocator/databases/registros' 
07-05 15:38:42.711: E/Database(3332): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
07-05 15:38:42.711: E/Database(3332): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1810)
07-05 15:38:42.711: E/Database(3332): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
07-05 15:38:42.711: E/Database(3332): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851)
07-05 15:38:42.711: E/Database(3332): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844)
07-05 15:38:42.711: E/Database(3332): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:540)
07-05 15:38:42.711: E/Database(3332): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
07-05 15:38:42.711: E/Database(3332): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
07-05 15:38:42.711: E/Database(3332): at com.db.RepositorioRegistroScript.<init>(RepositorioRegistroScript.java:42)
07-05 15:38:42.711: E/Database(3332): at com.gpslocator.Locator.verificaDb(Locator.java:360)
07-05 15:38:42.711: E/Database(3332): at com.gpslocator.Locator.checaNet(Locator.java:311)
07-05 15:38:42.711: E/Database(3332): at com.gpslocator.Locator$4.handleMessage(Locator.java:288)
07-05 15:38:42.711: E/Database(3332): at android.os.Handler.dispatchMessage(Handler.java:99)
07-05 15:38:42.711: E/Database(3332): at android.os.Looper.loop(Looper.java:123)
07-05 15:38:42.711: E/Database(3332): at android.app.ActivityThread.main(ActivityThread.java:4669)
07-05 15:38:42.711: E/Database(3332): at java.lang.reflect.Method.invokeNative(Native Method)
07-05 15:38:42.711: E/Database(3332): at java.lang.reflect.Method.invoke(Method.java:521)
07-05 15:38:42.711: E/Database(3332): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876)
07-05 15:38:42.711: E/Database(3332): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634)
07-05 15:38:42.711: E/Database(3332): at dalvik.system.NativeStart.main(Native Method)

As vezes tambem recebo um log: "Finalizing a Cursor that has not been deactivated or closed"

Abraço,

Gabriel Augusto



--
Abraço
Cristian Cardoso
@CTNCardoso
http://ctncardoso.com.br

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário