android - ImageButton and NullPointerException -
could nullpointerexception because button referencing nested inside several layouts? time reference browseeditbtn exception. it's simple button! come'on.
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <tablelayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:stretchcolumns="*"> <!-- <include layout="@layout/mydesctextview" /> --> <tablerow android:id="@+id/tablerow1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <textview android:text="textview" android:layout_width="wrap_content" android:layout_gravity="left|center_vertical" android:id="@+id/txtitem" android:textsize="20dip" ></textview> <imagebutton android:src="@drawable/editbtn" android:layout_marginright="10dip" android:layout_gravity="right|center_vertical" android:id="@+id/browseeditbtn" android:background="@drawable/my_group_statelist" ></imagebutton> </tablerow> </tablelayout> </linearlayout>
source code (the button called in main oncreate()):
public class browseactivity extends expandablelistactivity { final private string[] ascolumnstoreturn = { items.items_table_name + "." + items.items_item, items.items_table_name + "." + items.items_desc, items.items_table_name + "." + items.items_manu, items.items_table_name + "." + items.items_id }; @suppresswarnings("unchecked") @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.browse); dbhelper dbh = new dbhelper(this.getapplicationcontext()); sqlitedatabase db = dbh.getwritabledatabase(); sqlitequerybuilder querybuilder = new sqlitequerybuilder(); querybuilder.settables(items.items_table_name); expandablelistview browseview = (expandablelistview) findviewbyid(android.r.id.list); button editbrowsebtn = (button) findviewbyid(r.id.browseeditbtn); cursor mcursor = querybuilder.query(db, ascolumnstoreturn, null, null, null, null, items.default_sort_order); startmanagingcursor(mcursor); simpleexpandablelistadapter madapter = new simpleexpandablelistadapter( this, creategroup(), r.layout.row, r.layout.row, new string[] { items.items_item, items.items_desc }, new int[] { r.id.txtitem, r.id.dscitem }, createchildren(), r.layout.exprow, new string[] { items.items_desc, items.items_manu }, new int[] { r.id.dscitem, r.id.manuitem }); browseview.setadapter(madapter); editbrowsebtn.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { intent intent = new intent(browseactivity.this, edititemactivity.class); startactivity(intent); } }); } @override public boolean oncreateoptionsmenu(menu menu) { super.oncreateoptionsmenu(menu); menu.add("add item").setintent(new intent(this, additemactivity.class)); return super.oncreateoptionsmenu(menu); } @suppresswarnings("rawtypes") public list creategroup() { dbhelper dbh = new dbhelper(this.getapplicationcontext()); sqlitedatabase db = dbh.getwritabledatabase(); sqlitequerybuilder querybuilder = new sqlitequerybuilder(); querybuilder.settables(items.items_table_name); cursor mcursor = querybuilder.query(db, new string[] { items.items_item, items.items_desc }, null, null, null, null, items.default_sort_order); startmanagingcursor(mcursor); arraylist<hashmap<string, string>> grouplist = new arraylist<hashmap<string, string>>(); mcursor.movetofirst(); while (!(mcursor.isafterlast())) { hashmap<string, string> groupmap = new hashmap<string, string>(); groupmap.put(items.items_item, mcursor.getstring(mcursor.getcolumnindex(items.items_item))); groupmap.put(items.items_desc, mcursor.getstring(mcursor.getcolumnindex(items.items_desc))); grouplist.add(groupmap); mcursor.movetonext(); } return (list) grouplist; } @suppresswarnings("rawtypes") public list createchildren() { dbhelper dbh = new dbhelper(this.getapplicationcontext()); sqlitedatabase db = dbh.getwritabledatabase(); sqlitequerybuilder querybuilder = new sqlitequerybuilder(); querybuilder.settables(items.items_table_name); cursor mcursor = querybuilder.query(db, new string[] { items.items_item, items.items_desc, items.items_manu }, null, null, null, null, items.default_sort_order); startmanagingcursor(mcursor); mcursor.movetofirst(); arraylist<arraylist<hashmap<string, string>>> childlist = new arraylist<arraylist<hashmap<string, string>>>(); while (!(mcursor.isafterlast())) { arraylist<hashmap<string, string>> childlistdesc = new arraylist<hashmap<string, string>>(); (int = 0; < 1; i++) { hashmap<string, string> childmap = new hashmap<string, string>(); childmap.put(items.items_desc, mcursor.getstring(mcursor .getcolumnindex(items.items_desc))); childmap.put(items.items_manu, mcursor.getstring(mcursor .getcolumnindex(items.items_manu))); childlistdesc.add(childmap); } childlist.add(childlistdesc); mcursor.movetonext(); } return (list) childlist; } }
and logcat, think...
06-30 13:01:29.390: error/androidruntime(9189): fatal exception: main 06-30 13:01:29.390: error/androidruntime(9189): java.lang.runtimeexception: unable start activity componentinfo{com.simplydesign.mdk/com.simplydesign.mdk.browseactivity}: java.lang.nullpointerexception 06-30 13:01:29.390: error/androidruntime(9189): @ android.app.activitythread.performlaunchactivity(activitythread.java:2663) 06-30 13:01:29.390: error/androidruntime(9189): @ android.app.activitythread.handlelaunchactivity(activitythread.java:2679) 06-30 13:01:29.390: error/androidruntime(9189): @ android.app.activitythread.access$2300(activitythread.java:125) 06-30 13:01:29.390: error/androidruntime(9189): @ android.app.activitythread$h.handlemessage(activitythread.java:2033) 06-30 13:01:29.390: error/androidruntime(9189): @ android.os.handler.dispatchmessage(handler.java:99) 06-30 13:01:29.390: error/androidruntime(9189): @ android.os.looper.loop(looper.java:123) 06-30 13:01:29.390: error/androidruntime(9189): @ android.app.activitythread.main(activitythread.java:4627) 06-30 13:01:29.390: error/androidruntime(9189): @ java.lang.reflect.method.invokenative(native method) 06-30 13:01:29.390: error/androidruntime(9189): @ java.lang.reflect.method.invoke(method.java:521) 06-30 13:01:29.390: error/androidruntime(9189): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:858) 06-30 13:01:29.390: error/androidruntime(9189): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:616) 06-30 13:01:29.390: error/androidruntime(9189): @ dalvik.system.nativestart.main(native method) 06-30 13:01:29.390: error/androidruntime(9189): caused by: java.lang.nullpointerexception 06-30 13:01:29.390: error/androidruntime(9189): @ com.simplydesign.mdk.browseactivity.oncreate(browseactivity.java:62) 06-30 13:01:29.390: error/androidruntime(9189): @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1049) 06-30 13:01:29.390: error/androidruntime(9189): @ android.app.activitythread.performlaunchactivity(activitythread.java:2627) 06-30 13:01:29.390: error/androidruntime(9189): ... 11 more
edit_01
public void doaction(view v) { startactivity(new intent(getapplicationcontext(), edititemactivity.class)); }
i have used other buttons in past point edititemactivity , have worked fine.
what name of layout xml file posted? doesn't appear browse.xml because 1 has expandablelistview in it. ids reference in java code must appear in content view
set; otherwise, must inflate view
yourself.
edit
you add like
android:onclick="doaction"
to xml of imagebutton.
then have doaction(view v)
method in activity onclick actions.
Comments
Post a Comment