android - SQLiteAssetHelper db.getVersion() null when upgrading database -


i getting intermittent crash reports on variety of devices when upgrade shipped database using sqliteassethelper. seems occur when database has not yet finished transfer assets/databases folder device file system. have put number of checks in place check see upgrade finished, still having problems.

first check make sure database exists. has solved problem initial loading of database upon installation of app not updates:

public boolean databaseloaded(context context) { file dbfile = context.getdatabasepath(myconstants.default_database); return dbfile.exists();
}

here databasehelper:

class databasehelper extends sqliteassethelper {  public databasehelper(context context, string databasename, int databaseversion) {           super(context, databasename, null, databaseversion);     if (databaseversion>1 && databasename.equals(myconstants.default_database)) {         setforcedupgradeversion(databaseversion);                } } 

}

and in content provider call database way:

@override public boolean oncreate() {       database = constants.getdbname();     db=new databasehelper(getcontext(), database, myconstants.database_version);     return((db == null) ? false : true); } 

in content provider query first hacky thing give time if database version (my constant - not retrieved db itself) higher stored database version. crashes @ db.getreadabledatabase().

@override public cursor query(uri url, string[] projection, string selection, string[] selectionargs, string sort) {      /**if updating app, pause wait database transfer**/     sharedpreferences sharedpreferences = getcontext().getsharedpreferences(myconstants.prefs, 0);     int lastdbversion = sharedpreferences.getint("db_version", myconstants.starting_db_version);     if (lastdbversion<myconstants.database_version)  {         try {             thread.sleep(5000);                          } catch(interruptedexception ex) {             thread.currentthread().interrupt();         }         sharedpreferences.editor editor = sharedpreferences.edit();         editor.putint("db_version", myconstants.database_version);         editor.commit();     }             sqlitequerybuilder qb=new sqlitequerybuilder();      qb.settables(table);      string orderby;      if (textutils.isempty(sort)) {       orderby=_id;     }     else {       orderby=sort;     }     cursor c= null;     if (db.getreadabledatabase()!=null) {         c= qb.query(db.getreadabledatabase(), projection, selection,                  selectionargs, null, null, orderby);         c.setnotificationuri(getcontext().getcontentresolver(), url);     }     return c; } 

looking sqliteassethelper library, problem sqlitedatabase getwritabledatabase() db.getversion() returns null.

what missing here? how check see if transfer of new database complete?

here stacktrace:

java.lang.runtimeexception: error occured while executing doinbackground() @ android.os.asynctask$3.done(asynctask.java:300) @ java.util.concurrent.futuretask.finishcompletion(futuretask.java:355) @ java.util.concurrent.futuretask.setexception(futuretask.java:222) @ java.util.concurrent.futuretask.run(futuretask.java:242) @ android.os.asynctask$serialexecutor$1.run(asynctask.java:231) @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1112) @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:587) @ java.lang.thread.run(thread.java:841) caused by: java.lang.nullpointerexception @ com.readystatesoftware.sqliteasset.sqliteassethelper.getwritabledatabase(sqliteassethelper.java:180) //this db.getversion() null @ com.readystatesoftware.sqliteasset.sqliteassethelper.getreadabledatabase(sqliteassethelper.java:257) @ com.mypackage.provider.query(provider.java:84) //this if (db.getreadabledatabase()!=null) {... @ android.content.contentprovider.query(contentprovider.java:857) @ android.content.contentprovider$transport.query(contentprovider.java:200) @ android.content.contentresolver.query(contentresolver.java:477) @ android.content.contentresolver.query(contentresolver.java:420) @ com.mypackage.myclass$mymethod.doinbackground(myclass.java:594) //this cursor c = getactivity().getcontentresolver().query... @ com.mypackage.myclass$mymethod.doinbackground(myclass.java:1) @ android.os.asynctask$2.call(asynctask.java:288) @ java.util.concurrent.futuretask.run(futuretask.java:237) ... 4 more java.lang.nullpointerexception @ com.readystatesoftware.sqliteasset.sqliteassethelper.getwritabledatabase(sqliteassethelper.java:180) @ com.readystatesoftware.sqliteasset.sqliteassethelper.getreadabledatabase(sqliteassethelper.java:257) @ com.mypackage.provider.query(provider.java:84) @ android.content.contentprovider.query(contentprovider.java:857) @ android.content.contentprovider$transport.query(contentprovider.java:200) @ android.content.contentresolver.query(contentresolver.java:477) @ android.content.contentresolver.query(contentresolver.java:420) @ com.mypackage.myclass$mymethod.doinbackground(myclass.java:594) @ com.mypackage.myclass$mymethod.doinbackground(myclass.java:1) @ android.os.asynctask$2.call(asynctask.java:288) @ java.util.concurrent.futuretask.run(futuretask.java:237) @ android.os.asynctask$serialexecutor$1.run(asynctask.java:231) @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1112) @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:587) @ java.lang.thread.run(thread.java:841)


Comments

Popular posts from this blog

ruby on rails - RuntimeError: Circular dependency detected while autoloading constant - ActiveAdmin.register Role -

c++ - OpenMP unpredictable overhead -

javascript - Wordpress slider, not displayed 100% width -