2011-02-14 5 views
9

Mi código es:aplicación no cerró el objeto cursor o base de datos que se abrió aquí:

public class EventDataSQLHelper extends SQLiteOpenHelper { 
    private static final String DATABASE_NAME = "my.db"; 
} 

public class Test extends Activity { 
    EventDataSQLHelper eventsData; 

    @Override 
    protected void onDestroy() { 
     System.out.println("onDestroy"); 

     close(); 
     if (db!=null){ 

     db.close(); 

    } 
    super.onDestroy(); 
} 




public void close() { 
    eventsData.close(); 
} 

he cerrado el PP aquí .. En todas mis actividades excepto este su trabajo (no se muestra ninguna excepción) .. Aquí cuando se presiona el botón de vuelta de esta actividad de prueba se produce la excepción a continuación

02-14 15:59:34.642: ERROR/Database(535): close() was never explicitly called on database '/data/data/com.tesy.connect/databases/test.db' 
02-14 15:59:34.642: ERROR/Database(535): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here 
02-14 15:59:34.642: ERROR/Database(535):  at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1810) 
02-14 15:59:34.642: ERROR/Database(535):  at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817) 
02-14 15:59:34.642: ERROR/Database(535):  at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851) 
02-14 15:59:34.642: ERROR/Database(535):  at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844) 
02-14 15:59:34.642: ERROR/Database(535):  at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:540) 
02-14 15:59:34.642: ERROR/Database(535):  at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203) 
02-14 15:59:34.642: ERROR/Database(535):  at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98) 
02-14 15:59:34.642: ERROR/Database(535):  at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:158) 
02-14 15:59:34.642: ERROR/Database(535):  at com.connect.Test.getEvents(Connect_EY.java:755) 
02-14 15:59:34.642: ERROR/Database(535):  at com.connect.Test.onCreate(Connect_EY.java:662) 
02-14 15:59:34.642: ERROR/Database(535):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
02-14 15:59:34.642: ERROR/Database(535):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
02-14 15:59:34.642: ERROR/Database(535):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
02-14 15:59:34.642: ERROR/Database(535):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
02-14 15:59:34.642: ERROR/Database(535):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
02-14 15:59:34.642: ERROR/Database(535):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-14 15:59:34.642: ERROR/Database(535):  at android.os.Looper.loop(Looper.java:123) 

la excepción se produce en esta línea getEvents:

public class Test extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.pageview); 

    startRefreshActivity(); 
    try { /* If No Record Exists Create a New One */ 
    eventsData = new EventDataSQLHelper(this); 
    Cursor cursor = getEvents(); 
    startManagingCursor(cursor); 

    } 
} 

private Cursor getEvents() { 
    try { 
    db = eventsData.getReadableDatabase(); 
    Cursor cursor = db.query(EventDataSQLHelper.TABLE, null, null, 
     null, null, null, null); 
    startManagingCursor(cursor); 
    return cursor; 
} catch (Exception ex) { 
    System.out.println("Exception Occured : " + ex.toString()); 
    return null; 
} 

} 

Excepción:

02-14 15:59:34.642: ERROR/Database(535):  at com.testconnect.Test.getEvents(Test.java:755) 
02-14 15:59:34.642: ERROR/Database(535):  at com.testconnect.Test.onCreate(Test.java:662) 
+0

intente cerrar el cursor en onStop(); intente esto si (db! = null) {db = eventsData.getReadableDatabase(); } – Vamsi

+0

@Vamsi Lo he intentado pero se lanza una excepción de puntero nulo – MorningGlory

+0

¿Ha implementado onCreate() y onUpgrade() para la clase SQLiteOpenHelper? – Vamsi

Respuesta

6

Resolví la excepción. Estaba llamando

db = eventsData.getReadableDatabase(); 

dos veces Es por eso que se produce la excepción

1

¿Usted intentó:

 Cursor cursor = getEvents(); 
    startManagingCursor(cursor); 
    cursor.close(); 

?

+0

he hecho esto. .pero aún mostrando la excepción. se muestra en la línea Cursor cursor = getEvents(); dentro del método getEvents db = eventsData.getReadableDatabase(); \t Cursor cursor = db.query (EventDataSQLHelper.TABLE, nulo, nulo, \t \t nulo, nulo, nulo, nulo); En el Logcat se lanza la excepción en esta línea – MorningGlory

+0

. También estoy frente a esta aplicación. No cerré el cursor ni el objeto de la base de datos que se abrió aquí: Problema. Cómo reslove esa ... Ayuda de los pls. – jennifer

1

¿Usted intentó Después valor de retorno pase cerca del cursor como cursor.close

private Cursor getEvents() { 
    try { 
      db = eventsData.getReadableDatabase(); 
      Cursor cursor = db.query(EventDataSQLHelper.TABLE, null, null, 
      null, null, null, null); 
      startManagingCursor(cursor); 
      cursor.close(); 
      return cursor; 

     } catch (Exception ex) { 
       System.out.println("Exception Occured : " + ex.toString()); 
       return null; 
     } 
Cuestiones relacionadas