java - Using SharedPreferences for custom ArrayList -- Adapter or Editor error? -
i attempting save custom arraylist sharedpreferences. ideally first time app runs, there should empty sharedpreferences, if need fill 1 item, can "example." i've tried using debug break points , have isolated problem setadapter line marked below.
the app crashes @ setadapter line, may due editor not being initialized? debugger tells me "editor = null"
public class mainactivity extends appcompatactivity { arraylist<purchaseorders> purchaseorders = new arraylist<purchaseorders>(); purchaseorderadapter adapter; public sharedpreferences sharedpref; public sharedpreferences.editor editor; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); purchaseorders = new arraylist<purchaseorders>(); string[] items = new string[]{"1", "2", "3"}; purchaseorders.add(new purchaseorders(false, "purchasenumber", "customer", "date 1", "date 2", items)); save(); sharedpref = this.getsharedpreferences("com.lochdownstudios.simplepurchaseorderer", context.mode_private); editor = sharedpref.edit(); load(); adapter = new purchaseorderadapter(this, purchaseorders); final listview listview = (listview) findviewbyid(r.id.listview); listview.setadapter(adapter); // break point here. } private void save() { gson gson = new gson(); string json = gson.tojson(purchaseorders); editor.putstring("savedpurchaseorders", json); //editor = null .... hmmm.... editor.apply(); } private void load() { gson gson = new gson(); string json = sharedpref.getstring("savedpurchaseorders", ""); type type = new typetoken<list<purchaseorders>>(){}.gettype(); purchaseorders = gson.fromjson(json, type); } }
at break point (mentioned in comments), debugger tells me "editor = null". , following step crashes following logcat.
08-23 19:06:02.799 23974-23974/com.lochdownstudios.simplepurchaseorderer e/androidruntime: fatal exception: main process: com.lochdownstudios.simplepurchaseorderer, pid: 23974 java.lang.runtimeexception: unable start activity componentinfo{com.lochdownstudios.simplepurchaseorderer/com.lochdownstudios.simplepurchaseorderer.mainactivity}: java.lang.nullpointerexception: attempt invoke interface method 'android.content.sharedpreferences$editor android.content.sharedpreferences$editor.putstring(java.lang.string, java.lang.string)' on null object reference @ android.app.activitythread.performlaunchactivity(activitythread.java:3253) @ android.app.activitythread.handlelaunchactivity(activitythread.java:3349) @ android.app.activitythread.access$1100(activitythread.java:221) @ android.app.activitythread$h.handlemessage(activitythread.java:1794) @ android.os.handler.dispatchmessage(handler.java:102) @ android.os.looper.loop(looper.java:158) @ android.app.activitythread.main(activitythread.java:7224) @ java.lang.reflect.method.invoke(native method) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1230) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:1120) caused by: java.lang.nullpointerexception: attempt invoke interface method 'android.content.sharedpreferences$editor android.content.sharedpreferences$editor.putstring(java.lang.string, java.lang.string)' on null object reference @ com.lochdownstudios.simplepurchaseorderer.mainactivity.save(mainactivity.java:119) @ com.lochdownstudios.simplepurchaseorderer.mainactivity.oncreate(mainactivity.java:39) @ android.app.activity.performcreate(activity.java:6876) @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1135) @ android.app.activitythread.performlaunchactivity(activitythread.java:3206) @ android.app.activitythread.handlelaunchactivity(activitythread.java:3349) @ android.app.activitythread.access$1100(activitythread.java:221) @ android.app.activitythread$h.handlemessage(activitythread.java:1794) @ android.os.handler.dispatchmessage(handler.java:102) @ android.os.looper.loop(looper.java:158) @ android.app.activitythread.main(activitythread.java:7224) @ java.lang.reflect.method.invoke(native method) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1230) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:1120)
thoughts? thanks!
you calling save
uses editor
before initializing editor
maybe change order to
sharedpref = this.getsharedpreferences("com.lochdownstudios.simplepurchaseorderer", context.mode_private); editor = sharedpref.edit(); save();
Comments
Post a Comment