(Android) What have I done wrong in my code while trying to populate a spinner with database info -
i make data show in spinner consists of food objects (name, calories) gets created in main, , make these objects (just name now) show in spinner on activity. activity become part of larger program, , want able allow user ability "count" total amount of calories have eaten added foods selected. now, want able make foods appear can move further along. however, whenever go run it, app crashes no error message stated problem. if knows need do, please help. code below:
import android.support.v7.app.actionbaractivity; import android.os.bundle; import android.view.menu; import android.view.menuitem; import android.view.view; import android.widget.adapterview; import android.widget.adapterview.onitemselectedlistener; import android.widget.arrayadapter; import android.widget.spinner; import android.widget.toast; import java.util.list; public class mainactivity extends actionbaractivity implements onitemselectedlistener { mydbhandler dbhandler = new mydbhandler(this, null, null, 1); spinner spinner = (spinner) findviewbyid(r.id.spinner); @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); foods food1 = new foods("apple", "80"); foods food2 = new foods("bagel", "200"); foods food3 = new foods("biscuit", "65" ); foods food4 = new foods("banana", "105"); foods food5 = new foods("beef roast", "205"); foods food6 = new foods("corn", "60"); foods food7 = new foods("cereal", "120"); foods food8 = new foods("chicken", "240"); foods food9 = new foods("eggs", "105"); foods food10 = new foods("cabbage", "30"); foods food11 = new foods("oatmeal", "160"); foods food12 = new foods("pancake", "60"); foods food13 = new foods("pears", "100"); foods food14 = new foods("pizza", "290"); foods food15 = new foods("ice cream", "270"); foods food16 = new foods("pork chop", "335"); foods food17 = new foods("ham", "250"); foods food18 = new foods("ribs", "270"); foods food19 = new foods("popcorn", "55"); foods food20 = new foods("baked potato", "220"); foods food21 = new foods("rice", "225"); foods food22 = new foods("salad", "85"); foods food23 = new foods("spaghetti", "360"); foods food24 = new foods("bread", "65"); foods food25 = new foods("fish", "175"); dbhandler.addfood(food1); dbhandler.addfood(food2); dbhandler.addfood(food3); dbhandler.addfood(food4); dbhandler.addfood(food5); dbhandler.addfood(food6); dbhandler.addfood(food7); dbhandler.addfood(food8); dbhandler.addfood(food9); dbhandler.addfood(food10); dbhandler.addfood(food11); dbhandler.addfood(food12); dbhandler.addfood(food13); dbhandler.addfood(food14); dbhandler.addfood(food15); dbhandler.addfood(food16); dbhandler.addfood(food17); dbhandler.addfood(food18); dbhandler.addfood(food19); dbhandler.addfood(food20); dbhandler.addfood(food21); dbhandler.addfood(food22); dbhandler.addfood(food23); dbhandler.addfood(food24); dbhandler.addfood(food25); spinner.setonitemselectedlistener(this); loadspinnerdata(); } private void loadspinnerdata() { list<string> foodnames = dbhandler.getfoodnames(); arrayadapter<string> dataadapter = new arrayadapter<string>(this, android.r.layout.simple_spinner_item, foodnames); dataadapter.setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item); spinner.setadapter(dataadapter); } @override public void onnothingselected(adapterview<?> parent) { } @override public void onitemselected(adapterview<?> parent, view view, int position, long id) { string food = parent.getitematposition(position).tostring(); // showing selected spinner item toast.maketext(parent.getcontext(), "you selected: " + food, toast.length_long).show(); } } public class foods { private int _id; public int get_id() { return _id; } public void set_id(int _id) { this._id = _id; } private string name; private string calories; public foods(){ } public string getname() { return name; } public void setname(string name) { this.name = name; } public string getcalories() { return calories; } public void setcalories(string calories) { this.calories = calories; } public foods(string foodname, string foodcalories){ this.name = foodname; this.calories = foodcalories; } } import android.database.sqlite.sqlitedatabase; import android.database.sqlite.sqliteopenhelper; import android.database.cursor; import android.content.context; import android.content.contentvalues; import java.util.arraylist; import java.util.list; public class mydbhandler extends sqliteopenhelper { private static final int database_version = 1; private static final string database_name = "broncowellness.db"; public static final string table_foods = "food"; public static final string column_food_id = "_id"; public static final string column_food_name = "foodname"; public static final string column_food_calories = "foodcalories"; @override public void oncreate(sqlitedatabase db) { string foodquery = "create table " + table_foods + "(" + column_food_id + " integer primary key autoincrement, " + column_food_name + " text " + column_food_calories + " text " + ");"; db.execsql(foodquery); } @override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { db.execsql("drop table if exists " + table_foods); oncreate(db); } public mydbhandler(context context, string name, sqlitedatabase.cursorfactory factory, int version) { super(context,database_name ,factory, database_version);} public void addfood(foods food){ contentvalues values = new contentvalues(); values.put(column_food_name, food.getname()); values.put(column_food_calories, food.getcalories()); sqlitedatabase db = getwritabledatabase(); db.insert(table_foods,null,values); db.close(); } public list<string> getfoodnames(){ list<string> foodnames = new arraylist<string>(); string selectquery = "select * " + table_foods; sqlitedatabase db = this.getreadabledatabase(); cursor cursor = db.rawquery(selectquery, null); if (cursor.movetofirst()) { { foodnames.add(cursor.getstring(1)); } while (cursor.movetonext()); } cursor.close(); db.close(); return foodnames; } }
in code, initializing spinner outside oncreate() method. should this-
spinner spinner; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); spinner = (spinner) findviewbyid(r.id.spinner); //your code }
this solve issue.
Comments
Post a Comment