Aquí está el error:Obtengo una excepción de objeto de base de datos no cerrada en SQLite (Android), pero estoy cerrando explícitamente mi base de datos ... ¿Ayuda?
02-08 16: 35: 00,899: ERROR/base de datos (468): android.database.sqlite.DatabaseObjectNotClosedException: Aplicación no cerró el objeto cursor o base de datos que se abrió aquí
Excepto, bueno, yo soy. Aquí es donde el método de este problema se está produciendo:
public static void getUpdates(String username, Context context) {
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://10.0.2.2/tag/appgetfriendinfo.php");
try {
List<NameValuePair> nVPs = new ArrayList<NameValuePair>();
nVPs.add(new BasicNameValuePair("username", username));
httpPost.setEntity(new UrlEncodedFormEntity(nVPs));
HttpResponse response = httpClient.execute(httpPost);
ResponseHandler<String> rHandler = new BasicResponseHandler();
String result = rHandler.handleResponse(response);
JSONArray jArray = new JSONArray(result);
for(int i = 0; i < jArray.length(); i++) {
JSONObject jObj = jArray.getJSONObject(i);
String userCheck = jObj.getString("username");
TagDBAdapter dbHelper = new TagDBAdapter(context);
dbHelper.open();//OPENING THE DATABASE
Contact contact = new Contact();
String first = jObj.getString("firstname");
String last = jObj.getString("lastname");
String name = first + " " + last;
contact.setUsername(jObj.getString("username"));
contact.setFirstName(first);
contact.setLastName(last);
contact.setName(name);
contact.setPhoneNumber(jObj.getString("phonenumber"));
contact.setEmail(jObj.getString("email"));
contact.setHomePhone(jObj.getString("homephone"));
contact.setWorkPhone(jObj.getString("workphone"));
if(dbHelper.checkForExisting(userCheck) == true) {
dbHelper.createContact(contact);
}
else {
dbHelper.updateContactAuto(userCheck, contact);
}
dbHelper.close();//CLOSING THE DATABASE
}
} catch(ClientProtocolException e) {
Log.e("GETUPDATES", "CPE", e);
e.printStackTrace();
} catch(IOException e) {
Log.e("GETUPDATES", "IOE", e);
e.printStackTrace();
} catch(JSONException e) {
Log.e("GETUPDATES", "JSONE", e);
e.printStackTrace();
}
}
Como se puede ver en las líneas que se señala en los comentarios //, estoy apertura y cierre de la base de datos, sin embargo, todavía estoy recibiendo el error. Aquí está lo extraño, el origen del error está en el método open() de SQLite.
ERROR/Base de datos (468): a com.tagapp.android.TagDBAdapter.open (TagDBAdapter.java:62)
¿Cuál es la siguiente:
/**THESE ARE MY DBADAPTER'S OPEN AND CLOSE METHODS*/
public TagDBAdapter open() throws SQLException {
mDBHelper = new DatabaseHelper(m_context);
mDb = mDBHelper.getWritableDatabase();
return this;
}
public void close() {
mDBHelper.close();
}
Estos son directamente de Google de tutorial de bloc de notas, y han funcionado 100% para mí en diferentes instancias. ¿Alguien tiene una idea de lo que está pasando aquí? Muchas gracias.
@psyhclo que había necesito ver su actividad para ayudarlo allí, si puede publicarlo, intentaré y ayudaré – JMRboosties
ok, agregué la actividad al final de la publicación. puedes consultar el mismo enlace http://www.stackoverflow.com/questions/4921550/where-to-close-the-database Gracias. – rogcg
Eso es raro ... parece que debería cerrarse. Asegúrese de que sus métodos DBAdapter cierren los cursores, supongo, pero de su actividad se ve bien. Lo siento, no podría ser de más ayuda. – JMRboosties