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
Post a Comment