java - Android NullPointException on getWritableDatabase -


this question has answer here:

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

Popular posts from this blog

sql server - Cannot query correctly (MSSQL - PHP - JSON) -

php - trouble displaying mysqli database results in correct order -

C++ Linked List -