i have application consisting of 2 buttons , text view.
btninsert
: when user clicks this, insert statement performedbtnshow
: select statement executed , result displayed in textview.
the problem following. using asynctask perform write / read operations. created 2 separate asynctasks, 1 reading, 1 writing. insert (write async works properly, , sure values getting inserted because if run same insert statement twice primary key violation error:
07-19 11:46:48.080: e/androidruntime(21486): fatal exception: main 07-19 11:46:48.080: e/androidruntime(21486): android.database.sqlite.sqliteconstraintexception: primary key must unique (code 19)
this problem arises. performed properly, apparently, when run select statement ( clicking button), instead of value, com.example.testdb.mainactivity$select@4203e900
.
does know problem is? annoying, not know doing wrong. please have @ code:
public class mainactivity extends activity { static databaseimplementation db; static sqlitedatabase dbwrite; static sqlitedatabase dbread; static string insert = "insert tbl_test values(7, 'test');"; static string select = "select test tbl_test _id = 1;"; button btninsert; button btnshow; static textview txtview; //static string name = ""; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); db = new databaseimplementation(this); dbwrite = db.getwritabledatabase(); dbread = db.getreadabledatabase(); txtview = (textview)findviewbyid(r.id.txtview); btninsert = (button)findviewbyid(r.id.btninsert); btninsert.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { new insert().execute(); } }); btnshow = (button)findviewbyid(r.id.btnshow); btnshow.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { asynctask<string, void, string> n = new select().execute(); txtview.settext(n.tostring()); } }); } @override public boolean oncreateoptionsmenu(menu menu) { getmenuinflater().inflate(r.menu.main, menu); return true; } //insert async private class insert extends asynctask<string, void, string> { @override protected string doinbackground(string... params) { //connect database first. try { //string insert = executeinsert(); //onpostexecute(insert); } catch (exception e) { e.printstacktrace(); } return null; } @override protected void onpostexecute(string result) { //connect database first. dbwrite.execsql(insert); } } //select async private class select extends asynctask<string, void, string> { @override protected string doinbackground(string... params) { try { dbwrite = db.getwritabledatabase(); cursor c = dbwrite.rawquery(select, null); string name = ""; c.movetofirst(); name = c.getstring(0); return name; } catch (exception e) { e.printstacktrace(); } return null; } @override protected void onpostexecute(string result) { } }
}
i appreciate if me.
that has nothing database 2 lines:
asynctask<string, void, string> n = new select().execute(); txtview.settext(n.tostring());
variable n
of tyoe asynctask
, , applying tostring()
on therefore gives name of class described (com.example.testdb.mainactivity$select@4203e900
).
what got is, change onpostexecute()
method of select
class this:
@override protected void onpostexecute(string result) { txtview.settext(result); }
and remove line txtview.settext(n.tostring());
onclick handler.
Comments
Post a Comment