Getting error while executing getwritabledatabase() in android -
i have created 1 class database , multiple classes tables , multiple activity classess works fine when use database class instance in activity class @ same time when use database class instance in table class , run application control goes getwritabledatabase
getting exception , application exited, below code 3 classes.
database class.
public class database extends sqliteopenhelper{ private static string dbname="manager"; private static int dbversion=2; sqlitedatabase db; public database(context context) { super(context, dbname, null, dbversion); // todo auto-generated constructor stub db=this.getwritabledatabase(); } @override public void oncreate(sqlitedatabase db) { // todo auto-generated method stub stocktable st=new stocktable(); db.execsql(st.stocktable); } @override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { // todo auto-generated method stub } }
activity class
public class stockmanager extends activity{ string getentry=null; database d=new database(this); stocktable st=new stocktable(); protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.stockmanager); final button addstock=(button) findviewbyid(r.id.button1); final edittext entry=(edittext) findviewbyid(r.id.edittext1); final button brodetail=(button) findviewbyid(r.id.button2); addstock.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { // todo auto-generated method stub getentry=entry.gettext().tostring(); d.db.insert(st.tablename, null,st.insert()); } }); } }
table class
public class stocktable { context c1; database d1=new database(c1); final string tablename="stocktable"; private string column1="stock_id"; private string column2="stockname"; final string stocktable = "create table " + tablename + " (" + column1+ " integer primary key , " + column2 + " text) "; public contentvalues insert(){ string select="select stockid stocktable"; d.db.execsql(select); contentvalues cvi=new contentvalues(); for(int i=0;i<=sm.getentry.length();i++) { cvi.put(column1, 1); cvi.put(column2,sm.getentry); } return cvi; } public void delete(){ }
first when control goes getwritabledatabase
of database class activity class executing after when control stock table class goes database class , executes getwritabledatabase
exception occurred, unfortunately unable paste exceptions here.
can please me solve ?
logcat
02-07 10:06:09.624: d/libegl(10756): loaded /system/lib/egl/libegl_genymotion.so 02-07 10:06:09.628: d/(10756): hostconnection::get() new host connection established 0xb87f5e00, tid 10756 02-07 10:06:09.720: d/libegl(10756): loaded /system/lib/egl/libglesv1_cm_genymotion.so 02-07 10:06:09.748: d/libegl(10756): loaded /system/lib/egl/libglesv2_genymotion.so 02-07 10:06:10.024: w/egl_genymotion(10756): eglsurfaceattrib not implemented 02-07 10:06:10.044: e/openglrenderer(10756): getting max_texture_size gradiencache 02-07 10:06:10.196: e/openglrenderer(10756): getting max_texture_size caches::initconstraints() 02-07 10:06:10.212: d/openglrenderer(10756): enabling debug mode 0 02-07 10:07:17.328: w/egl_genymotion(10756): eglsurfaceattrib not implemented 02-07 10:07:19.820: i/choreographer(10756): skipped 36 frames! application may doing work on main thread. 02-07 10:07:22.556: w/egl_genymotion(10756): eglsurfaceattrib not implemented 02-07 10:07:22.788: i/choreographer(10756): skipped 44 frames! application may doing work on main thread. 02-07 10:07:28.064: d/dalvikvm(10756): gc_for_alloc freed 105k, 1% free 16944k/17072k, paused 37ms, total 40ms 02-07 10:07:30.524: i/system.out(10756): asdfdw 02-07 10:07:30.576: d/androidruntime(10756): shutting down vm 02-07 10:07:30.612: w/dalvikvm(10756): threadid=1: thread exiting uncaught exception (group=0xa4b6e648) 02-07 10:07:30.652: e/androidruntime(10756): fatal exception: main 02-07 10:07:30.652: e/androidruntime(10756): android.database.sqlite.sqliteexception: unknown error (code 0): queries can performed using sqlitedatabase query or rawquery methods only. 02-07 10:07:30.652: e/androidruntime(10756): @ android.database.sqlite.sqliteconnection.nativeexecuteforchangedrowcount(native method) 02-07 10:07:30.652: e/androidruntime(10756): @ android.database.sqlite.sqliteconnection.executeforchangedrowcount(sqliteconnection.java:734) 02-07 10:07:30.652: e/androidruntime(10756): @ android.database.sqlite.sqlitesession.executeforchangedrowcount(sqlitesession.java:754) 02-07 10:07:30.652: e/androidruntime(10756): @ android.database.sqlite.sqlitestatement.executeupdatedelete(sqlitestatement.java:64) 02-07 10:07:30.652: e/androidruntime(10756): @ android.database.sqlite.sqlitedatabase.executesql(sqlitedatabase.java:1674) 02-07 10:07:30.652: e/androidruntime(10756): @ android.database.sqlite.sqlitedatabase.execsql(sqlitedatabase.java:1603) 02-07 10:07:30.652: e/androidruntime(10756): @ com.example.portfoliomanager.stocktable.insert(stocktable.java:43) 02-07 10:07:30.652: e/androidruntime(10756): @ com.example.portfoliomanager.stockmanager$1.onclick(stockmanager.java:36) 02-07 10:07:30.652: e/androidruntime(10756): @ android.view.view.performclick(view.java:4240) 02-07 10:07:30.652: e/androidruntime(10756): @ android.view.view$performclick.run(view.java:17721) 02-07 10:07:30.652: e/androidruntime(10756): @ android.os.handler.handlecallback(handler.java:730) 02-07 10:07:30.652: e/androidruntime(10756): @ android.os.handler.dispatchmessage(handler.java:92) 02-07 10:07:30.652: e/androidruntime(10756): @ android.os.looper.loop(looper.java:137) 02-07 10:07:30.652: e/androidruntime(10756): @ android.app.activitythread.main(activitythread.java:5103) 02-07 10:07:30.652: e/androidruntime(10756): @ java.lang.reflect.method.invokenative(native method) 02-07 10:07:30.652: e/androidruntime(10756): @ java.lang.reflect.method.invoke(method.java:525) 02-07 10:07:30.652: e/androidruntime(10756): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:737) 02-07 10:07:30.652: e/androidruntime(10756): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:553) 02-07 10:07:30.652: e/androidruntime(10756): @ dalvik.system.nativestart.main(native method) 02-07 10:07:34.288: i/process(10756): sending signal. pid: 10756 sig: 9 02-07 10:07:36.624: d/libegl(10871): loaded /system/lib/egl/libegl_genymotion.so 02-07 10:07:36.644: d/(10871): hostconnection::get() new host connection established 0xb87f5e70, tid 10871 02-07 10:07:36.784: d/libegl(10871): loaded /system/lib/egl/libglesv1_cm_genymotion.so 02-07 10:07:36.784: d/libegl(10871): loaded /system/lib/egl/libglesv2_genymotion.so 02-07 10:07:37.104: w/egl_genymotion(10871): eglsurfaceattrib not implemented 02-07 10:07:37.108: e/openglrenderer(10871): getting max_texture_size gradiencache 02-07 10:07:37.132: e/openglrenderer(10871): getting max_texture_size caches::initconstraints() 02-07 10:07:37.132: d/openglrenderer(10871): enabling debug mode 0
error because trying access database null context. need initialize c1 before passing database constructor.
i edit stocktable.java try this
import android.content.contentvalues; import android.content.context; public class stocktable { context c1; database d1; final string tablename = "stocktable"; private string column1 = "stock_id"; private string column2 = "stockname"; final string stocktable = "create table " + tablename + " (" + column1 + " integer primary key , " + column2 + " text) "; public stocktable(context mcontext){ c1= mcontext; d1= new database(c1); } public contentvalues insert() { contentvalues cvi = new contentvalues(); (int = 0; <= sm.getentry.length(); i++) { cvi.put(column1, 1); cvi.put(column2, sm.getentry); } return cvi; } public void delete() { } }
how use?
public class stockmanager extends activity { string getentry = null; database d; stocktable st; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.stockmanager); d = new database(this.getapplicationcontext()); st = new stocktable(this.getapplicationcontext()); final button addstock = (button) findviewbyid(r.id.button1); final edittext entry = (edittext) findviewbyid(r.id.edittext1); final button brodetail = (button) findviewbyid(r.id.button2); addstock.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { // todo auto-generated method stub getentry = entry.gettext().tostring(); d.db.insert(st.tablename, null, st.insert()); } }); } }
update database class
public class database extends sqliteopenhelper { private static string dbname = "manager"; private static int dbversion = 2; sqlitedatabase db; private context mcontext; public database(context context) { super(context, dbname, null, dbversion); // todo auto-generated constructor stub mcontext = context; db = this.getwritabledatabase(); } @override public void oncreate(sqlitedatabase db) { // todo auto-generated method stub stocktable st = new stocktable(mcontext); db.execsql(st.stocktable); } @override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { // todo auto-generated method stub } }
Comments
Post a Comment