java - "A SQLiteConnection was leaked" warning -
i have problem sqlite, i'm getting warning:
sqliteconnection object database '//data//data//com.compapps.booster//databases//booster.db' leaked! please fix application end transactions in progress , close database when no longer needed. and logcat showing continuously, after closing app:
database exists so think programm perform execution if app closed, here code of class:
package com.compapps.booster.db; import java.io.fileoutputstream; import java.io.ioexception; import java.io.inputstream; import java.io.outputstream; import java.util.arraylist; import android.content.contentvalues; import android.content.context; import android.database.cursor; import android.database.sqlexception; import android.database.sqlite.sqliteconstraintexception; import android.database.sqlite.sqlitedatabase; import android.database.sqlite.sqliteopenhelper; import android.util.log; import com.compapps.booster.model.appinfo; import com.compapps.booster.model.usedappinfo; import com.compapps.booster.utill.const; public class externaldbopenhelper extends sqliteopenhelper { // path device folder databases public static string db_path; // database file name public static string db_name; public sqlitedatabase database; public final context context; public sqlitedatabase getdb() { return database; } public externaldbopenhelper(context context, string databasename, int databaseversion) { super(context, databasename, null, databaseversion); this.context = context; // write full path databases of application string packagename = context.getpackagename(); db_path = string.format("//data//data//%s//databases//", packagename); db_name = databasename; opendatabase(); } // piece of code create database if itï؟½s not yet created public void createdatabase() { boolean dbexist = checkdatabase(); if (!dbexist) { this.getreadabledatabase(); try { copydatabase(); } catch (ioexception e) { log.e(this.getclass().tostring(), "copying error"); throw new error("error copying database!"); } } else { log.i(this.getclass().tostring(), "database exists"); } } // performing database existence check private boolean checkdatabase() { sqlitedatabase checkdb = null; try { string path = db_path + db_name; checkdb = sqlitedatabase.opendatabase(path, null, sqlitedatabase.open_readonly); } catch (sqlexception e) { log.e(this.getclass().tostring(), "error while checking db"); } // android doesnt resource leaks, should // closed if (checkdb != null) { checkdb.close(); } return checkdb != null; } // method copying database private void copydatabase() throws ioexception { // open stream reading our ready-made database // stream source located in assets inputstream externaldbstream = context.getassets().open(db_name); // path created empty database on android device string outfilename = db_path + db_name; // create stream writing database byte byte outputstream localdbstream = new fileoutputstream(outfilename); // copying database byte[] buffer = new byte[1024]; int bytesread; while ((bytesread = externaldbstream.read(buffer)) > 0) { localdbstream.write(buffer, 0, bytesread); } // dont forget close streams localdbstream.close(); externaldbstream.close(); } public sqlitedatabase opendatabase() throws sqlexception { string path = db_path + db_name; if (database == null) { createdatabase(); } database = sqlitedatabase.opendatabase(path, null, sqlitedatabase.open_readwrite); return database; } @override public void oncreate(sqlitedatabase db) { } @override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { } public void insertautokillapps(final arraylist<appinfo> listautokillapps) { (int = 0; < listautokillapps.size(); i++) { if (listautokillapps.get(i).ischecked()) { appinfo info = listautokillapps.get(i); contentvalues values = new contentvalues(); values.put(const.tblautokillcolumn.app_name, info.getappname()); values.put(const.tblautokillcolumn.package_name, info.getpkgname()); values.put(const.tblautokillcolumn.process_id, info.getprocessid()); int id = (int) database.insert(const.table_auto_kill, null, values); } } } public int insertautokillapp(appinfo info) { contentvalues values = new contentvalues(); values.put(const.tblautokillcolumn.app_name, info.getappname()); values.put(const.tblautokillcolumn.package_name, info.getpkgname()); // values.put(const.tblautokillcolumn.process_id, info.getprocessid()); int id = (int) database.insert(const.table_auto_kill, null, values); return id; } public int insertallautokillapp(arraylist<appinfo> list) { int count = 0; (int = 0; < list.size(); i++) { appinfo info = list.get(i); contentvalues values = new contentvalues(); values.put(const.tblautokillcolumn.app_name, info.getappname()); values.put(const.tblautokillcolumn.package_name, info.getpkgname()); // values.put(const.tblautokillcolumn.process_id, // info.getprocessid()); int id = (int) database.insert(const.table_auto_kill, null, values); if (id != -1) { count += 1; } } system.out.println("total app kill inserted " + count); return count; } public boolean deleteautokillapp(appinfo info) { int row = database.delete(const.table_auto_kill, const.tblautokillcolumn.package_name + " = ?", new string[] { info.getpkgname() }); if (row != 0) { return true; } return false; } public int deleteallautokillapp(arraylist<appinfo> list) { int count = 0; (int = 0; < list.size(); i++) { appinfo info = list.get(i); int row = database.delete(const.table_auto_kill, const.tblautokillcolumn.package_name + " = ?", new string[] { info.getpkgname() }); if (row != 0) { count += 1; } } system.out.println("total app kill deleted " + count); return count; } public arraylist<appinfo> getautokillapps() { arraylist<appinfo> applist = new arraylist<appinfo>(); string selectquery = "select * " + const.table_auto_kill; cursor cursor = database.rawquery(selectquery, null); try { if (cursor != null && cursor.getcount() > 0) { if (cursor.movetofirst()) { { appinfo info = new appinfo(); info.setappname(cursor.getstring(0)); info.setpkgname(cursor.getstring(1)); // info.setprocessid(cursor.getint(2)); applist.add(info); } while (cursor.movetonext()); } } return applist; } catch (exception e) { log.d("error in getting app auto kill db", e.getmessage()); return applist; } finally{ cursor.close(); } } public int insertusedappinfo(usedappinfo uappinfo, boolean isupdate) { int id = 0; if (isupdate) { contentvalues values = new contentvalues(); values.put(const.tblappusedcolumn.open_counter, uappinfo.getcounter()); values.put(const.tblappusedcolumn.open_time, uappinfo.gettime()); string[] args = new string[] { uappinfo.getpackage_name() }; id = (int) database.update(const.table_app_used_detail, values, const.tblappusedcolumn.package_name + "=?", args); } else { contentvalues values = new contentvalues(); values.put(const.tblappusedcolumn.package_name, uappinfo.getpackage_name()); values.put(const.tblappusedcolumn.open_counter, uappinfo.getcounter()); values.put(const.tblappusedcolumn.open_time, uappinfo.gettime()); id = (int) database.insert(const.table_app_used_detail, null, values); } return id; } public usedappinfo gettusedappinfo(string packagename) { usedappinfo uappinfo = null; string selectquery = "select * " + const.table_app_used_detail + " " + const.tblappusedcolumn.package_name + " = " + "\"" + packagename + "\""; system.out.println("query coding: " + selectquery); try { cursor cursor = database.rawquery(selectquery, null); if (cursor != null && cursor.getcount() > 0) { if (cursor.movetofirst()) { uappinfo = new usedappinfo(); uappinfo.setpackage_name(cursor.getstring(0)); uappinfo.setcounter(cursor.getint(1)); uappinfo.settime(cursor.getstring(2)); } cursor.close(); } return uappinfo; } catch (exception e) { log.d("error in getting app info db", e.getmessage()); return null; } } @override public synchronized void close() { if (database != null) { database.close(); } super.close(); } } can have please, thanks!
Comments
Post a Comment