android - could not execute method of the activity -


i activity uses arrayadapter display checkboxes , spinners on screen, depending on definitions in xml. user checks desired checkboxes , chooses desired spinners , clicks "save". problem occures when spinner not visible on screen (due scrolling), crash happens.

my code :

public class detailsactivity extends activity {     inputstream detailsfile;     map<string, list<string>> details;     listview list;     string[] titlesarray;     arraylist<string> types;     hashmap<integer, integer> spinnerpositions = null;      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_details);          assetmanager = this.getassets();         try {             detailsfile = am.open("details.xml");         } catch (ioexception e) {             // todo auto-generated catch block             e.printstacktrace();         }         types = new arraylist<string>();         details = parsedetailsxml(detailsfile);          set<string> keys = details.keyset();         titlesarray = keys.toarray(new string[keys.size()]);         list = (listview) findviewbyid(r.id.list_view);          detailsadapter adapter = new detailsadapter(this, titlesarray, details,                 types);         list.setadapter(adapter);     }      public map<string, list<string>> parsedetailsxml(inputstream is) {         linkedhashmap<string, list<string>> map = new linkedhashmap<string, list<string>>();         documentbuilderfactory factory = documentbuilderfactory.newinstance();         documentbuilder builder = null;         try {             builder = factory.newdocumentbuilder();             document doc = builder.parse(is, "utf-8");             element root = doc.getdocumentelement();             nodelist children = root.getchildnodes();             list<string> detaillist = null;             (int = 0; < children.getlength(); i++) {                 node child = children.item(i);                 if (child instanceof element) {                     element childelement = (element) child;                     this.types.add(childelement.getattribute("type"));                     nodelist details = childelement.getchildnodes();                     string detail = childelement.getnodename();                     detaillist = new linkedlist<string>();                     if (childelement.getattribute("type").equalsignorecase("dropdown")) {                         detaillist.add("no selection");                     }                      (int j = 0; j < details.getlength(); j++) {                          node detailnd = details.item(j);                         if (detailnd instanceof element) {                             element detailelement = (element) detailnd;                             string text = detailelement.getattribute("val");                             detaillist.add(text);                          }                      }                     map.put(detail, detaillist);                  }             }         } catch (parserconfigurationexception e) {             // todo auto-generated catch block             e.printstacktrace();         } catch (saxexception e) {             // todo auto-generated catch block             e.printstacktrace();         } catch (ioexception e) {             // todo auto-generated catch block             e.printstacktrace();         }         ;         return map;      }      public class detailsadapter extends arrayadapter<string> {         context context;         string[] titlearray;         map<string, list<string>> details;         list<string> types;          detailsadapter(context c, string[] titles,                 map<string, list<string>> details, list<string> types) {             super(c, r.layout.details_single_row, r.id.text_view, titles);             this.context = c;             this.titlearray = titles;             this.details = details;             this.types = types;         }          @override         public view getview(int position, view convertview, viewgroup parent) {             layoutinflater inflater = (layoutinflater) context                     .getsystemservice(context.layout_inflater_service);             string mcurrenttype = types.get(position);             if (mcurrenttype.contains("checkbox")) {                 view row = inflater.inflate(r.layout.details_single_row,                         parent, false);                 textview mytitle = (textview) row.findviewbyid(r.id.text_view);                 viewgroup checkboxcontainer = (viewgroup) row                         .findviewbyid(r.id.checkboxcontainer);                  mytitle.settext(titlearray[position]);                  list<string> checkboxtitles = details.get(titlearray[position]);                 int = 1;                 (string value : checkboxtitles) {                     checkbox checkbox = new checkbox(context);                     checkbox.setid(i);                     checkbox.settext(value);                     checkbox.settextsize(35);                     checkboxcontainer.addview(checkbox);                     i++;                 }                 return row;              } else {                 view row = inflater.inflate(                         r.layout.details_single_row_dropdown, parent, false);                 textview mytitle = (textview) row.findviewbyid(r.id.textview1);                 mytitle.settext(titlearray[position]);                 list<string> spinnertitles = details.get(titlearray[position]);                  spinner spinner = (spinner) row                         .findviewbyid(r.id.spinner_details);                 arrayadapter<string> spinnerarrayadapter = new arrayadapter<string>(                         context, android.r.layout.simple_dropdown_item_1line,                         spinnertitles);                  spinnerarrayadapter                         .setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item);                  spinner.setadapter(spinnerarrayadapter);                  spinner.setgravity(gravity.center);                 return row;              }          }      }       public void savebutton(view v) {         myglobals.details = new linkedhashmap<string, arraylist<string>>();         myglobals.accessories = null;         spinnerpositions = new hashmap<integer, integer>();         listview list = (listview) findviewbyid(r.id.list_view);         view row;         checkbox checkbox = null;         list<string> titles = new arraylist<string>(details.keyset());         (int = 0; < list.getcount(); i++) {             string title = titles.get(i); // title             list<string> valuelist = details.get(title); // list ascosiated                                                             // title             row = list.getchildat(i);             string type = types.get(i);             if (type.contains("checkbox")) {                 arraylist<string> checkedtitles = new arraylist<string>();                 viewgroup checkboxcontainer = (viewgroup) row                         .findviewbyid(r.id.checkboxcontainer);                 (int j = 0; j < checkboxcontainer.getchildcount(); j++) {                     checkbox = (checkbox) checkboxcontainer.findviewbyid(j + 1);                     if (checkbox.ischecked()) {                         string checkboxtitle = checkbox.gettext().tostring();                         checkedtitles.add(checkboxtitle);                      }                 }                 if (!checkedtitles.isempty()) {                     myglobals.details.put(title, checkedtitles);                 }             } else {                 arraylist<string> selecteditem = new arraylist<string>();                 spinner spinner = (spinner) row                         .findviewbyid(r.id.spinner_details);                 spinnerpositions.put(i, spinner.getselecteditemposition());                 string selected = spinner.getselecteditem().tostring();                 selecteditem.add(selected);                 myglobals.details.put(title, selecteditem);             }         }          toast toast = toast.maketext(this, "accesories saved!",                 toast.length_short);         toast.show();         stringbuilder sb = new stringbuilder("");         (map.entry<string, arraylist<string>> entry : myglobals.details                 .entryset()) {             string key = entry.getkey();             arraylist<string> list2 = entry.getvalue();             string joined = textutils.join(",", list2);             sb.append(key + " : " + joined + " . ");             myglobals.accessories = sb.tostring();          }         log.d("yaniv", myglobals.accessories);     }      @override     protected void onsaveinstancestate(bundle outstate) {          outstate.putstringarraylist("types", types);         outstate.putstringarray("titlesarray", titlesarray);         outstate.putserializable("spinnerpositions", spinnerpositions);         (entry<string, arraylist<string>> entry : myglobals.details                 .entryset()) {             string key = entry.getkey();             arraylist<string> list = entry.getvalue();             outstate.putstringarraylist(key, list);         }          super.onsaveinstancestate(outstate);     }      @override     protected void onrestoreinstancestate(bundle savedinstancestate) {         string[] titles = savedinstancestate.getstringarray("titlesarray");         arraylist<string> typesarraylist = savedinstancestate                 .getstringarraylist("types");         spinnerpositions = (hashmap<integer, integer>) savedinstancestate                 .getserializable("spinnerpositions");         (string value : typesarraylist) {             listview list = (listview) findviewbyid(r.id.list_view);             view row;             checkbox checkbox = null;             (int = 0; < list.getcount(); i++) {                 string currenttitle = titles[i];                 arraylist<string> currentlist = savedinstancestate                         .getstringarraylist(currenttitle);                 row = list.getchildat(i);                 if (value.contains("checkbox")) {                     viewgroup checkboxcontainer = (viewgroup) row                             .findviewbyid(r.id.checkboxcontainer);                     (int j = 0; j < checkboxcontainer.getchildcount(); j++) {                         checkbox = (checkbox) checkboxcontainer                                 .findviewbyid(j + 1);                         if (currentlist.contains(checkbox.gettext())) {                             checkbox.setchecked(true);                          }                     }                 } else {                     spinner spinner = (spinner) row                             .findviewbyid(r.id.spinner_details);                     spinner.setselection(spinnerpositions.get(i));                 }             }         }         super.onrestoreinstancestate(savedinstancestate);     }  } 

my logcat crash :

06-14 17:15:03.013: e/androidruntime(10109): fatal exception: main 06-14 17:15:03.013: e/androidruntime(10109): process: com.tfl.techmanager, pid: 10109 06-14 17:15:03.013: e/androidruntime(10109): java.lang.illegalstateexception: not execute method of activity 06-14 17:15:03.013: e/androidruntime(10109):    @ android.view.view$1.onclick(view.java:3823) 06-14 17:15:03.013: e/androidruntime(10109):    @ android.view.view.performclick(view.java:4438) 06-14 17:15:03.013: e/androidruntime(10109):    @ android.view.view$performclick.run(view.java:18422) 06-14 17:15:03.013: e/androidruntime(10109):    @ android.os.handler.handlecallback(handler.java:733) 06-14 17:15:03.013: e/androidruntime(10109):    @ android.os.handler.dispatchmessage(handler.java:95) 06-14 17:15:03.013: e/androidruntime(10109):    @ android.os.looper.loop(looper.java:136) 06-14 17:15:03.013: e/androidruntime(10109):    @ android.app.activitythread.main(activitythread.java:5001) 06-14 17:15:03.013: e/androidruntime(10109):    @ java.lang.reflect.method.invokenative(native method) 06-14 17:15:03.013: e/androidruntime(10109):    @ java.lang.reflect.method.invoke(method.java:515) 06-14 17:15:03.013: e/androidruntime(10109):    @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:785) 06-14 17:15:03.013: e/androidruntime(10109):    @ com.android.internal.os.zygoteinit.main(zygoteinit.java:601) 06-14 17:15:03.013: e/androidruntime(10109):    @ dalvik.system.nativestart.main(native method) 06-14 17:15:03.013: e/androidruntime(10109): caused by: java.lang.reflect.invocationtargetexception 06-14 17:15:03.013: e/androidruntime(10109):    @ java.lang.reflect.method.invokenative(native method) 06-14 17:15:03.013: e/androidruntime(10109):    @ java.lang.reflect.method.invoke(method.java:515) 06-14 17:15:03.013: e/androidruntime(10109):    @ android.view.view$1.onclick(view.java:3818) 06-14 17:15:03.013: e/androidruntime(10109):    ... 11 more 06-14 17:15:03.013: e/androidruntime(10109): caused by: java.lang.nullpointerexception 06-14 17:15:03.013: e/androidruntime(10109):    @ com.tfl.techmanager.detailsactivity.savebutton(detailsactivity.java:226) 06-14 17:15:03.013: e/androidruntime(10109):    ... 14 more 

it crashed in line :

            spinner spinner = (spinner) row                     .findviewbyid(r.id.spinner_details); 

and crash occurs when spinner not visible on screen due scrolling (but available)


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 -