2012-06-27 15 views
5

Hy todo el mundo,java.lang.IllegalStateException: intento de volver a abrir un objeto ya cerrado: android.database.sqlite.SQLiteQuery

tengo un error y no sé lo que está mal

aquí está mi error de registro

java.lang.IllegalStateException: attempt to re-open an already-closed object: android.database.sqlite.SQLiteQuery (mSql = SELECT display_name, _id FROM view_data_restricted data WHERE (1) AND (data1 =? AND mimetype='vnd.android.cursor.item/group_membership' AND display_name like '%r%') ORDER BY display_name) 

y aquí está mi código

public Cursor runQuery(CharSequence constraint) { 
filter = nome.getText().toString(); 

try{ 
tempCurs = getContentResolver().query(ContactsContract.Groups.CONTENT_URI, 
    new String[]{ContactsContract.Groups._ID,ContactsContract.Groups.TITLE}, 
    ContactsContract.Groups.ACCOUNT_NAME + " =? " + " AND " + ContactsContract.Groups.TITLE + " !=? ", 
    new String[]{accountName,nomeGrupo}, 
    null 
    );  
if(tempCurs.moveToFirst()) 
    do{ 
     cursorContactosGrupos = getContentResolver().query(ContactsContract.Data.CONTENT_URI, 
       new String[]{ContactsContract.CommonDataKinds.GroupMembership.DISPLAY_NAME, ContactsContract.CommonDataKinds.GroupMembership._ID}, 
       ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + " =? AND " + Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE + "' AND " + ContactsContract.CommonDataKinds.GroupMembership.DISPLAY_NAME + " like '%" + filter + "%'" , 
       new String[]{String.valueOf(tempCurs.getLong(0))}, 
       ContactsContract.CommonDataKinds.GroupMembership.DISPLAY_NAME 
       ); 
     //Log.w(SocioEdit.class.getName(), "->" + cursorContactosGrupos.getString(cursorContactosGrupos.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME))); 
      }while(tempCurs.moveToNext()); 
     }finally{ 
      if(cursorContactosGrupos != null && tempCurs != null && !cursorContactosGrupos.isClosed() && !tempCurs.isClosed()){ 
       cursorContactosGrupos.close(); 
       tempCurs.close(); 
      } 
     } 
     return cursorContactosGrupos; 
    }  
}); 

Lo que estoy haciendo wr ¿cómo puede arreglarlo? Gracias por la ayuda

+0

getContentResolver() devuelven DB objeto correcto? –

+0

agregue aquí más código. – Sajmon

+0

acepta la respuesta si funciona bien :) –

Respuesta

11

el error es posiblemente debido a que usted está volviendo un Cursor que ya ha cerrado en el bloque finally y usted puede estar tratando de utilizar el valor devuelto.

Cambiar el bloque finally a lo siguiente:

finally{ 
    if(tempCurs != null && !tempCurs.isClosed()){ 
     tempCurs.close(); 
    } 
} 

y no olvide cerrar la Cursor volver del método de llamada.

+0

Sí, eso es cierto, pero en cambio dice que debes averiguar dónde está haciendo mal el código. –

+2

Un método que devuelve un Cursor cerrado sin realizar nada más es un método inútil y que en sí mismo es incorrecto. – user1417430

+0

Sí, ahí lo tienes, finalmente lo encontraste, Cheers :) –

-1

Trate eliminación siguientes líneas de su código a continuación, comprobar de nuevo,

finally{ 
      if(cursorContactosGrupos != null && tempCurs != null && !cursorContactosGrupos.isClosed() && !tempCurs.isClosed()){ 
       cursorContactosGrupos.close(); 
       tempCurs.close(); 
      } 

Añadir este lugar

finally{ 
       if(cursorContactosGrupos != null && tempCurs != null && !cursorContactosGrupos.isClosed() && !tempCurs.isClosed()){ 

        tempCurs.close(); 
       } 
+0

Usted será filtrar un 'Cursor' si se quita las líneas. No es correcto. – Rajesh

+0

Diez razones por las cuales el método que contiene esta línea está devolviendo el cursor si quieres cerrar el cursor que ya no estará en uso, puedes tener el método con vacío como tipo de retorno, no creo que mi respuesta deba ser votada por esto, la pregunta en sí es como esto ¿qué hacer? :) –

+0

Solo uso estos dos cursores en esta función. No abro en otro lado. Creo que no puedo eliminar estas líneas porque los cursores deben cerrarse ... –

Cuestiones relacionadas