android - problems with my SQLiteOpenHelper -


package com.owen.quartergames.dao;  import java.io.inputstream; import java.util.arraylist; import java.util.list;  import javax.xml.parsers.documentbuilder; import javax.xml.parsers.documentbuilderfactory;  import org.w3c.dom.document; import org.w3c.dom.nodelist;  import android.content.contentvalues; import android.content.context; import android.database.cursor; import android.database.sqlite.sqlitedatabase; import android.database.sqlite.sqliteopenhelper; import android.util.log; import android.widget.toast;  import com.owen.quartergames.r; import com.owen.quartergames.domain.logentry;  public class sqllitefishloggerdao extends sqliteopenhelper implements         fishloggerdao {      private static final string db_name = "fishinglog";      private static final string table_name = "logentries";      private static final string delete_log_entry_sql = "delete logentries _id = ?;";      private static final string find_log_entry_sql = "select _id, longitude, latitude logentries _id = ?";      private static final string find_all_entries_sql = "select * logentries";      private static final string[] no_args = {};      private context context;      private final sqlitedatabase db = getwritabledatabase();      public sqllitefishloggerdao(context context) {         super(context, db_name, null, 1);         this.context = context;     }      @override     public void deletelogentry(string id) {         id = "0";          db.execsql(delete_log_entry_sql, new object[] { id });         // int deleted = db.delete(table_name, "_id = ?",         // new string[] { id.trim() });         // log.i("fishlogger", string.format("delete %d rows", deleted));         db.close();     }      @override     public logentry findentry(string id) {         cursor cursor = db.rawquery(find_log_entry_sql, new string[] { id });         if (!cursor.movetofirst()) {             return null;         }          logentry entry = new logentry();         entry.setid(id);         entry.setlatitude(cursor.getdouble(cursor.getcolumnindex("latitude")));         entry                 .setlongitude(cursor.getdouble(cursor                         .getcolumnindex("longitude")));         cursor.close();         db.close();         return entry;      }      @override     public void insertlogentry(logentry entry) {         contentvalues values = new contentvalues();         values.put("latitude", entry.getlatitude());         values.put("longitude", entry.getlongitude());         values.put("pictureurl", entry.getpictureurl());         values.put("sizeorweight", entry.getsizeorweight());         values.put("createdate", entry.getentrydate());         values.put("species", entry.getspecies());         db.insertorthrow("logentries", null, values);         db.close();     }      @override     public void oncreate(sqlitedatabase db) {         string s;         try {             toast.maketext(context, "1", 2000).show();             inputstream in = context.getresources().openrawresource(r.raw.sql);             documentbuilder builder = documentbuilderfactory.newinstance()                     .newdocumentbuilder();             document doc = builder.parse(in, null);             nodelist statements = doc.getelementsbytagname("statement");             (int = 0; < statements.getlength(); i++) {                 s = statements.item(i).getchildnodes().item(0).getnodevalue();                 db.execsql(s);             }         } catch (throwable t) {             toast.maketext(context, t.tostring(), 50000).show();         }         log.e("db", "db created");      }      @override     public list<logentry> findallentries() {          list<logentry> entries = new arraylist<logentry>();          cursor cursor = db.rawquery(find_all_entries_sql, no_args);          int entrydatecol = cursor.getcolumnindex("createdate");         int speciescol = cursor.getcolumnindex("species");         int sizecol = cursor.getcolumnindex("sizeorweight");         int latcol = cursor.getcolumnindex("latitude");          if (cursor.movetofirst()) {             {                 logentry entry = new logentry();                 entry.setentrydate(cursor.getstring(entrydatecol));                 entry.setspecies(cursor.getstring(speciescol));                 entry.setsizeorweight(cursor.getstring(sizecol));                 entry.setlatitude(cursor.getdouble(latcol));                  if (entry.getspecies() == null) {                     entry.setspecies("not entered");                 }                  if (entry.getsizeorweight() == null) {                     entry.setsizeorweight("not entered");                 }                  entries.add(entry);             } while (cursor.movetonext());         }         cursor.close();         db.close();         return entries;     }      @override     public void onupgrade(sqlitedatabase db, int oldversion, int newversion) {         db.execsql("drop table if exists " + table_name);         oncreate(getwritabledatabase());     } } 

basically delete doesnt work think problems stems findallentries() method. reason "leak found" errors in log cat saying db created never closed. have throughly searched internet , have asked friends code no luck in solving problem. cursors closed , can tell how sqlliteopenhelper should like.

thanks responses

your getreadabledatabase() opens db read. avoid leaks, need close after work done.

final db = getreadabledatabase(); //do things db.close(); 

the same getwritabledatabase().


Comments

Popular posts from this blog

php - What is the difference between $_SERVER['PATH_INFO'] and $_SERVER['ORIG_PATH_INFO']? -

fortran - Function return type mismatch -

queue - mq_receive: message too long -