android - SQLite database is empty after first loading -
when create db , insert items inside , after try read it empty, in first start of app, there anyway refresh db or reload after insert new item. want read from first start, not second.
here code:
public class dbhelper extends sqliteopenhelper { protected sqlitedatabase database; public dbhelper(context context) { super(context, dbconstants.db_name, null, dbconstants.db_version); open(); } public void insertmuseum(museum museum) { contentvalues cv = new contentvalues(); cv.put(dbconstants.key_id, museum.getid()); cv.put(dbconstants.key_url, museum.getimageurl()); cv.put(dbconstants.key_description, museum.getdescription()); cv.put(dbconstants.key_location, museum.getlocation()); cv.put(dbconstants.key_name, museum.getname()); cv.put(dbconstants.key_map_status, museum.getmapstatus()); cv.put(dbconstants.key_map_size, museum.getmapsizekb()); database.insert(dbconstants.db_table_museums, null, cv); } public void insertroom(room room) { contentvalues cv = new contentvalues(); cv.put(dbconstants.key_id, room.getid()); (door door : room.getdoors()) { cv.put(dbconstants.key_doors, door.getconnectedto()); } cv.put(dbconstants.key_map_id, room.getmapid()); (qr qr : room.getqrs()) { cv.put(dbconstants.key_qrs, qr.getid()); } (mappoint point : room.getshape()) { cv.put(dbconstants.key_shape, point.getx()); } database.insert(dbconstants.db_table_rooms, null, cv); } public void insertmap(museummap map) { contentvalues cv = new contentvalues(); cv.put(dbconstants.key_id, map.getid()); (room room : map.getrooms()) { cv.put(dbconstants.key_room_id, room.getid()); } cv.put(dbconstants.key_museum_id, map.getmuseumid()); cv.put(dbconstants.key_entrance_room_id, map.getentranceroomid()); database.insert(dbconstants.db_table_maps, null, cv); } public void insertdoor(door door) { contentvalues cv = new contentvalues(); cv.put(dbconstants.key_connected_to, door.getconnectedto()); cv.put(dbconstants.key_x, door.getx()); cv.put(dbconstants.key_y, door.gety()); cv.put(dbconstants.key_map_id, door.getmapid()); cv.put(dbconstants.key_room_id, door.getroomid()); cv.put(dbconstants.key_id, door.getid()); database.insert(dbconstants.db_table_doors, null, cv); } public void insertshape(mappoint point) { contentvalues cv = new contentvalues(); cv.put(dbconstants.key_x, point.getx()); cv.put(dbconstants.key_y, point.gety()); cv.put(dbconstants.key_map_id, point.getmapid()); cv.put(dbconstants.key_id, point.getid()); cv.put(dbconstants.key_room_id, point.getroomid()); database.insert(dbconstants.db_table_shape, null, cv); } public void insertqr(qr qr) { contentvalues cv = new contentvalues(); cv.put(dbconstants.key_id, qr.getid()); cv.put(dbconstants.key_info, qr.getinfo()); cv.put(dbconstants.key_x, qr.getx()); cv.put(dbconstants.key_y, qr.gety()); cv.put(dbconstants.key_map_id, qr.getmapid()); cv.put(dbconstants.key_room_id, qr.getroomid()); database.insert(dbconstants.db_table_qrs, null, cv); } private void open() { database = this.getwritabledatabase(); } @override public void oncreate(sqlitedatabase db) { db.execsql(createmuseumtable()); db.execsql(createmaptable()); db.execsql(createroomstable()); db.execsql(createqrstable()); db.execsql(createdoorstable()); db.execsql(createshapetable()); } private string createdoorstable() { return "create table if not exists " + dbconstants.db_table_doors + " (_id integer primary key autoincrement, " + dbconstants.key_connected_to + " text, " + dbconstants.key_map_id + " text, " + dbconstants.key_id + " text, " + dbconstants.key_room_id + " text, " + dbconstants.key_x + " real, " + dbconstants.key_y + " real);"; } private string createshapetable() { return "create table if not exists " + dbconstants.db_table_shape + " (_id integer primary key autoincrement, " + dbconstants.key_x + " real, " + dbconstants.key_room_id + " text, " + dbconstants.key_map_id + " text, " + dbconstants.key_id + " text, " + dbconstants.key_y + " real);"; } private string createroomstable() { return "create table if not exists " + dbconstants.db_table_rooms + " (_id integer primary key autoincrement, " + dbconstants.key_doors + " text, " + dbconstants.key_id + " text, " + dbconstants.key_shape + " real, " + dbconstants.key_map_id + " text, " + dbconstants.key_qrs + " text);"; } private string createmaptable() { return "create table if not exists " + dbconstants.db_table_maps + " (_id integer primary key autoincrement, " + dbconstants.key_room_id + " text, " + dbconstants.key_id + " text, " + dbconstants.key_museum_id + " int, " + dbconstants.key_entrance_room_id + " text);"; } private string createmuseumtable() { return "create table if not exists " + dbconstants.db_table_museums + " (_id integer primary key autoincrement, " + dbconstants.key_id + " int, " + dbconstants.key_description + " text, " + dbconstants.key_location + " text, " + dbconstants.key_name + " text, " + dbconstants.key_url + " text, " + dbconstants.key_map_status + " int, " + dbconstants.key_map_size + " int);"; } private string createqrstable() { return "create table if not exists " + dbconstants.db_table_qrs + " (_id integer primary key autoincrement, " + dbconstants.key_info + " text, " + dbconstants.key_id + " text, " + dbconstants.key_x + " real, " + dbconstants.key_map_id + " text, " + dbconstants.key_room_id + " text, " + dbconstants.key_y + " real);"; } @override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { db.execsql("drop table if exists " + dbconstants.db_table_museums); db.execsql("drop table if exists " + dbconstants.db_table_maps); db.execsql("drop table if exists " + dbconstants.db_table_rooms); db.execsql("drop table if exists " + dbconstants.db_table_qrs); db.execsql("drop table if exists " + dbconstants.db_table_doors); db.execsql("drop table if exists " + dbconstants.db_table_shape); oncreate(db); } public void museumstatusupdate(int museumid, int mapstatus) { contentvalues values = new contentvalues(); values.put(dbconstants.key_map_status, mapstatus); database.update(dbconstants.db_table_museums, values, dbconstants.key_id + "=" + museumid, null); } public boolean isempty(string tablename) { string count = "select count(*) " + tablename; cursor mcursor = database.rawquery(count, null); mcursor.movetofirst(); int icount = mcursor.getint(0); mcursor.close(); return icount <= 0; } public void close() { database.close(); } public cursor getshapevalues() { return this.database.query(dbconstants.db_table_shape, new string[]{ dbconstants.key_x, dbconstants.key_y, dbconstants.key_room_id, dbconstants.key_map_id, dbconstants.key_id}, null, null, null, null, null); } public cursor getdoorvalues() { return this.database.query(dbconstants.db_table_doors, new string[]{dbconstants.key_connected_to, dbconstants.key_map_id, dbconstants.key_room_id, dbconstants.key_id, dbconstants.key_x, dbconstants.key_y}, null, null, null, null, null); } public cursor getqrvalues() { return this.database.query(dbconstants.db_table_qrs, new string[]{dbconstants.key_id, dbconstants.key_info, dbconstants.key_x, dbconstants.key_y, dbconstants.key_map_id, dbconstants.key_room_id}, null, null, null, null, null); } public cursor getmuseumvalues() { return this.database.query(dbconstants.db_table_museums, new string[]{dbconstants.key_id, dbconstants.key_description, dbconstants.key_location, dbconstants.key_map_status, dbconstants.key_name, dbconstants.key_map_size, dbconstants.key_url} , null, null, null, null, null); } public cursor getroomvalues() { return this.database.query(dbconstants.db_table_rooms, new string[]{dbconstants.key_id, dbconstants.key_doors, dbconstants.key_map_id, dbconstants.key_shape, dbconstants.key_qrs}, null, null, null, null, null); } public cursor getmapvalues() { return this.database.query(dbconstants.db_table_maps, new string[]{dbconstants.key_id, dbconstants.key_room_id, dbconstants.key_museum_id, dbconstants.key_entrance_room_id} , null, null, null, null, null); } }
the problem here whe try call cursor.movetofirst() :
public void loadmuseumslist(final downloadlistener listener) { cursor cursor = dbutils.readmuseumrecord(); if (cursor.movetofirst()) { { museum museum = new museum(); museum.setimageurl(cursor.getstring(cursor.getcolumnindex(dbconstants.key_url))); museum.setdescription(cursor.getstring(cursor.getcolumnindex(dbconstants.key_description))); museum.setlocation(cursor.getstring(cursor.getcolumnindex(dbconstants.key_location))); museum.setmapsizekb(cursor.getint(cursor.getcolumnindex(dbconstants.key_map_size))); museum.setid(cursor.getint(cursor.getcolumnindex(dbconstants.key_id))); museum.setname(cursor.getstring(cursor.getcolumnindex(dbconstants.key_name))); museum.setmapstatus(cursor.getint(cursor.getcolumnindex(dbconstants.key_map_status))); if (!duplicatecheck(museums, museum)) { museums.add(museum); } } while (cursor.movetonext()); } listener.onmuseumlistdownloaded(museums); }
it return false.
and before method loading db here:
public void downloadmuseumslist(final downloadlistener listener) { final boolean isempty = dbutils.isempty(); firebaseref.child("museums").addvalueeventlistener(new valueeventlistener() { @override public void ondatachange(datasnapshot datasnapshot) { list<museum> museums = new arraylist<>(); (datasnapshot postmuseum : datasnapshot.getchildren()) { museum museum = postmuseum.getvalue(museum.class); if (!duplicatecheck(museums, museum)) { museums.add(museum); dbutils.writemuseumrecord(museum); } } if (isempty){ listener.onmuseumlistdownloaded(museums); } } @override public void oncancelled(firebaseerror firebaseerror) { log.e(tag, firebaseerror.tostring()); } }); }
this wehre writing records after downloading, db empty after , after restart app db ok.
i found solution! problem recording in db asynchronous , code going on , db empty :)
i changed , ok now:
public void loadcontent(final downloadlistener listener) { if (dbutils.isempty()) { firebaseloader.getinstance(context).downloadmuseumslist(new downloadlistener() { @override public void onmuseumlistdownloaded(list<museum> museums) { loadmuseumslist(listener); } }); } else { firebaseloader.getinstance(context).downloadmuseumslist(listener); loadmuseumslist(listener); } }
Comments
Post a Comment