android - ArrayList<String>() and SharedPreference using ObjectSerializer -


i have application saves array list of string , serializes using objectserializer saves serialized list in sharedpreferences instance.

it involves 2 activities "putting" , "getting" same sharepreferences object.

in listactivity, long-click item start deletion process. after string deletes, re-initialize listadapter updated arraylist<string> object update listview. after restart listacivity calling again, item reappears in list. causes nullpointerexception when clicked because points object doesnt exist anymore (null).

i have tried removing items arraylist<string> , putting in objectserializer sharedpreferences. tried removing old sharedpreference value (using clear() or remove() methods). maybe i'm overlooking step, cannot figure out can causing it.

would able show or walk me through how serialize arraylist<string>, save sharedpreference object, remove , item list, , update sharedpreference object can same (correctly updated list) sharedpreference object activity?

thank much!

below (shortened) code:

activity 1:

public static final string title_pref = "titlelist"; arraylist<string> titlelist = new arraylist<>();  @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_main);      savebtn.setonclicklistener(new view.onclicklistener() {         @override         public void onclick(view v) {             savesongfile(title, song);         }     }); }  private void savesongfile(string title, string song) {     bufferedwriter bufferwriter = null;     try {         fileoutputstream fos = openfileoutput(title, context.mode_private);         bufferwriter = new bufferedwriter(new outputstreamwriter(fos));         bufferwriter.write(song);     } catch (ioexception e) {         e.printstacktrace();     } {         try {             bufferwriter.close();         } catch (ioexception e) {             e.printstacktrace();         }     }     // new songs (not updated songs) go top     if (!titlelist.contains(title))         titlelist.add(0, title);     msettitlelistadapter(titlelist);     savetitlearray(); }  private void savetitlearray() {     prefeditor = titlepref.edit();     try {         prefeditor.putstring(title_pref, objectserializer.serialize(titlelist));     } catch (ioexception e) {         e.printstacktrace();     }     prefeditor.apply(); }  private void msettitlelistadapter(arraylist<string> list) {     autocompleteadapter = new arrayadapter<>(             this,             android.r.layout.simple_list_item_1,             list     );     titlebox.setadapter(autocompleteadapter); } 

activity 2 (listactivity):

public static final string extra_name = "com.frankbrenyah.lyricmaker.name"; public static final string title_pref = "titlelist";     @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_pick_song_list);      //init string array blank list or sharedpref saved data     songlistarray = new arraylist<>();     titlepref = getsharedpreferences(title_pref, mode_private);     try {         songlistarray = (arraylist<string>) objectserializer.deserialize(                 titlepref.getstring(title_pref,                         objectserializer.serialize(new arraylist<string>())                 )         );     } catch (ioexception e) {         e.printstacktrace();     } catch (classnotfoundexception e) {         e.printstacktrace();     }     msetlistadapter(songlistarray);      getlistview().setonitemlongclicklistener(new adapterview.onitemlongclicklistener() {         @override         public boolean onitemlongclick(adapterview<?> parent, view view, final int position, long id) {             final alertdialog.builder confirmdel = new alertdialog.builder(picksong_list.this);             confirmdel.settitle("delete?")                     .setmessage("this cannot undone!")                     .setpositivebutton("do not delete", new dialoginterface.onclicklistener() {                         @override                         public void onclick(dialoginterface dialog, int which) {                             //system default dismiss()                         }                     })                     .setnegativebutton("yes", new dialoginterface.onclicklistener() {                         @override                         public void onclick(dialoginterface dialog, int which) {                             //delete song, update title list                             getapplicationcontext().deletefile(songlistarray.get(position));                             songlistarray.remove(position);                             updatesharedpref(titlepref, title_pref, songlistarray);                             msetlistadapter(songlistarray);                             toast.maketext(                                     getapplicationcontext(),                                     "deleted",                                     toast.length_short).show();                         }                     });             confirmdel.create().show();             return true;         }     }); }  @override protected void onlistitemclick (listview l, view v, int position, long id){     //return selected song main activity can loaded text box's     intent resultintent = new intent(extra_name, uri.parse(songlistarray.get(position)));     setresult(result_ok, resultintent);     finish(); }  private void msetlistadapter(arraylist<string> list) {     final arrayadapter<string> arrayadapter = new arrayadapter<>(             this,             android.r.layout.simple_list_item_1,             list     );     setlistadapter(arrayadapter); }  private void updatesharedpref(sharedpreferences sharedpref,                               string preffilename,                               arraylist<string> list) {      sharedpreferences.editor editor = sharedpref.edit();     try {         editor.putstring(preffilename, objectserializer.serialize(list));     } catch (ioexception e) {         e.printstacktrace();     }     editor.apply(); } 

addition: below 1 error instance randomly selected user.

java.lang.runtimeexception: failure delivering result resultinfo{who=null,   request=0, result=-1, data=intent { act=com.my.app.name   dat=scrivo una canzone }} activity   {com.my.app/com.my.app.activityone}:   java.lang.nullpointerexception: attempt invoke virtual method 'void   java.io.bufferedreader.close()' on null object reference   @ android.app.activitythread.deliverresults(activitythread.java:3633)   @ android.app.activitythread.handlesendresult(activitythread.java:3676)   @ android.app.activitythread.access$1300(activitythread.java:151)   @ android.app.activitythread$h.handlemessage(activitythread.java:1358)   @ android.os.handler.dispatchmessage(handler.java:102)   @ android.os.looper.loop(looper.java:135)   @ android.app.activitythread.main(activitythread.java:5351)   @ java.lang.reflect.method.invoke(native method)   @ java.lang.reflect.method.invoke(method.java:372)   ... 10 more 


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -