java - Android NullPointException on getWritableDatabase -
this question has answer here:
- what nullpointerexception, , how fix it? 12 answers
i know question asked thousand times , read lot of them , answers. couldnt fix problem in case. when i'm calling getwritabledatabase() function in android app exception:
e/androidruntime: fatal exception: main process: de.schneider_schwarz_inc.tagesablauf_log, pid: 12634 java.lang.runtimeexception: unable start activity componentinfo{de.schneider_schwarz_inc.tagesablauf_log/de.schneider_schwarz_inc.tagesablauf_log.gui.todo.todolist}: java.lang.runtimeexception: java.lang.nullpointerexception: attempt invoke virtual method 'android.database.sqlite.sqlitedatabase android.content.context.openorcreatedatabase(java.lang.string, int, android.database.sqlite.sqlitedatabase$cursorfactory, android.database.databaseerrorhandler)' on null object reference @ android.app.activitythread.performlaunchactivity(activitythread.java:2646) @ android.app.activitythread.handlelaunchactivity(activitythread.java:2707) @ android.app.activitythread.-wrap12(activitythread.java) @ android.app.activitythread$h.handlemessage(activitythread.java:1460) @ android.os.handler.dispatchmessage(handler.java:102) @ android.os.looper.loop(looper.java:154) @ android.app.activitythread.main(activitythread.java:6077) @ java.lang.reflect.method.invoke(native method) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:865) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:755) caused by: java.lang.runtimeexception: java.lang.nullpointerexception: attempt invoke virtual method 'android.database.sqlite.sqlitedatabase android.content.context.openorcreatedatabase(java.lang.string, int, android.database.sqlite.sqlitedatabase$cursorfactory, android.database.databaseerrorhandler)' on null object reference @ de.schneider_schwarz_inc.tagesablauf_log.database.todo.tododao.inserttodo(tododao.java:41) @ de.schneider_schwarz_inc.tagesablauf_log.todo.createtodo(todo.java:25) @ de.schneider_schwarz_inc.tagesablauf_log.gui.todo.todolist.oncreate(todolist.java:47) @ android.app.activity.performcreate(activity.java:6664) @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1118) @ android.app.activitythread.performlaunchactivity(activitythread.java:2599) @ android.app.activitythread.handlelaunchactivity(activitythread.java:2707) @ android.app.activitythread.-wrap12(activitythread.java) @ android.app.activitythread$h.handlemessage(activitythread.java:1460) @ android.os.handler.dispatchmessage(handler.java:102) @ android.os.looper.loop(looper.java:154) @ android.app.activitythread.main(activitythread.java:6077) @ java.lang.reflect.method.invoke(native method) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:865) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:755) caused by: java.lang.nullpointerexception: attempt invoke virtual method 'android.database.sqlite.sqlitedatabase android.content.context.openorcreatedatabase(java.lang.string, int, android.database.sqlite.sqlitedatabase$cursorfactory, android.database.databaseerrorhandler)' on null object reference @ android.database.sqlite.sqliteopenhelper.getdatabaselocked(sqliteopenhelper.java:223) @ android.database.sqlite.sqliteopenhelper.getwritabledatabase(sqliteopenhelper.java:163) @ de.schneider_schwarz_inc.tagesablauf_log.database.todo.tododao.inserttodo(tododao.java:32) @ de.schneider_schwarz_inc.tagesablauf_log.todo.createtodo(todo.java:25) @ de.schneider_schwarz_inc.tagesablauf_log.gui.todo.todolist.oncreate(todolist.java:47) @ android.app.activity.performcreate(activity.java:6664) @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1118) @ android.app.activitythread.performlaunchactivity(activitythread.java:2599) @ android.app.activitythread.handlelaunchactivity(activitythread.java:2707) @ android.app.activitythread.-wrap12(activitythread.java) @ android.app.activitythread$h.handlemessage(activitythread.java:1460) @ android.os.handler.dispatchmessage(handler.java:102) @ android.os.looper.loop(looper.java:154) @ android.app.activitythread.main(activitythread.java:6077) @ java.lang.reflect.method.invoke(native method) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:865) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:755) my sqliteopenhelper class:
public tododbhelper(context context) {super(context, database_name, null, database_version); } public void oncreate(sqlitedatabase db) { system.out.println("creating database"); db.execsql(sql_create_entries); } public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { db.execsql(sql_delete_entries); oncreate(db); } public static int getdatabaseversion() { return database_version; } i use in class:
public class tododao { private context context; private tododbhelper tododbhelper; public tododao(context context){ this.context = context; tododbhelper = new tododbhelper(context); } /** * inserts todos database * @param data data insert * @return -1 when error, else id */ public long inserttodo(tododata data){ try{ sqlitedatabase db = tododbhelper.getwritabledatabase(); contentvalues values = new contentvalues(); values.put(todostructure.todoentry.column_name_title, data.gettitle()); values.put(todostructure.todoentry.column_name_date, data.getdate()); return db.insert(todostructure.todoentry.table_name, null, values); }catch (exception e){ system.out.println("error!"); //todo handling exception throw new runtimeexception(e); } } the dao use here:
public class todo { private list<tododata> datalist; private context context; private tododao dao = new tododao(context); public todo(context context){ this.context = context; //datalist = dao.getalltodos(); datalist = new arraylist<>(); } public int createtodo(string title, string date){ tododata newdata = new tododata(title, date); long id = dao.inserttodo(newdata); if(id == -1){ return (int) id; } newdata.setid(string.valueof(id)); datalist.add(newdata); return 0; } and @ least activity context:
public class todolist extends activity { private recyclerview mrecyclerview; private recyclerview.adapter madapter; private recyclerview.layoutmanager mlayoutmanager; @override protected void oncreate(bundle savedinstancestate){ system.out.println("createlistview"); super.oncreate(savedinstancestate); setcontentview(r.layout.activity_todo); mrecyclerview = (recyclerview) findviewbyid(r.id.recycler_view); mrecyclerview.setlayoutmanager(new linearlayoutmanager(this)); mrecyclerview.sethasfixedsize(true); mlayoutmanager = new linearlayoutmanager(this); mrecyclerview.setlayoutmanager(mlayoutmanager); todo todo = new todo(this); todo.createtodo("test1", "20160910"); list<tododata> todolist = todo.getdatalist(); system.out.println(todolist.get(0).gettitle()); madapter = new todoviewadapter(getbasecontext(), todolist); mrecyclerview.setadapter(madapter); } i think problem context. dont know fix it...
thanks!
ok... got problem.
private context context; private tododao dao = new tododao(context); public todo(context context){ this.context = context; //datalist = dao.getalltodos(); datalist = new arraylist<>(); } the context null when pass dao. instead i've done now:
private context context; private tododao dao; public todo(context context){ this.context = context; dao = new tododao(context); //datalist = dao.getalltodos(); datalist = new arraylist<>(); } such blame...
Comments
Post a Comment