android - Database saving all the details rather than the image -
im writing simple app save contacts in list. database working fine, when im restarting app or updating contact's details(even when im not updating image), images not visible again.
there's missed along way? in advance!
mainactivity.class
package org.intracode.contactmanager; import android.content.intent; import android.net.uri; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.text.editable; import android.text.textutils; import android.text.textwatcher; import android.view.contextmenu; import android.view.menu; import android.view.menuitem; import android.view.view; import android.view.viewgroup; import android.widget.adapterview; import android.widget.arrayadapter; import android.widget.button; import android.widget.edittext; import android.widget.imageview; import android.widget.listview; import android.widget.tabhost; import android.widget.textview; import android.widget.toast; import java.net.uri; import java.util.arraylist; import java.util.linkedlist; import java.util.list; public class mainactivity extends appcompatactivity { //live apearences in screen objects edittext nameline, phoneline, emailline, addressline; button addbtn; tabhost mytab; list<contact> mycontactlist = new arraylist<>(); listview mylistview; imageview contactimage; uri imageuri = uri.parse("android.resource://org.intracode.contactmanager/drawable/no_logo.png");// including assigning databasehandler contacsdb; arrayadapter<contact> mycontactsadapter; int longcclickelemnt;//clicked item position private static final int edit=0,delete=1; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); //assigning line fields nameline = (edittext) findviewbyid(r.id.nameline); phoneline = (edittext) findviewbyid(r.id.phoneline); emailline = (edittext) findviewbyid(r.id.emailline); addressline = (edittext) findviewbyid(r.id.adressline); addbtn = (button) findviewbyid(r.id.savebutton); //assigning tab objects mytab = (tabhost) findviewbyid(r.id.tabhost); //assigning general tab mytab.setup(); //assigning first sub tub tabhost.tabspec tabspec = mytab.newtabspec("creator"); tabspec.setcontent(r.id.creatortab); tabspec.setindicator("creator");//name of sub tab mytab.addtab(tabspec);// connecting sub tab general tab // assigning second sub tub tabspec = mytab.newtabspec("list"); tabspec.setcontent(r.id.tabcontactlist); tabspec.setindicator("list");//name of sub tab mytab.addtab(tabspec);// connecting sub tab general tab //assigning listview object mylistview = (listview) findviewbyid(r.id.listview); // assigning imageview object contactimage = (imageview) findviewbyid(r.id.contactimage); //assignig database contacsdb = new databasehandler(getapplicationcontext()); //register menu list object registerforcontextmenu(mylistview); mylistview.setonitemlongclicklistener(new adapterview.onitemlongclicklistener() { @override public boolean onitemlongclick(adapterview<?> adapterview, view view, int i, long l) { longcclickelemnt=i; contactimage.setvisibility(view.visible); return false; } }); // name event nameline.addtextchangedlistener(new textwatcher() { @override public void beforetextchanged(charsequence charsequence, int i, int i1, int i2) { } @override public void ontextchanged(charsequence charsequence, int i, int i1, int i2) { string email = charsequence.tostring().trim(); addbtn.setenabled(string.valueof(nameline.gettext()).trim().length() > 0 && isvalidemaillid(email)); } @override public void aftertextchanged(editable editable) { } }); // email event emailline.addtextchangedlistener(new textwatcher() { string emailstring = emailline.gettext().tostring().trim(); @override public void beforetextchanged(charsequence charsequence, int i, int i1, int i2) { } @override public void ontextchanged(charsequence charsequence, int i, int i1, int i2) { string email = charsequence.tostring().trim(); addbtn.setenabled(nameline.gettext().tostring().trim().length() > 0 && isvalidemaillid(email)); } @override public void aftertextchanged(editable editable) { } }); //buttonevent addbtn.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { contact newcont = new contact(contacsdb.getcontactscount(), nameline.gettext().tostring(), phoneline.gettext().tostring(), emailline.gettext().tostring(), addressline.gettext().tostring(), imageuri); if (!contactexist(newcont)) { contacsdb.createcontact(newcont); mycontactlist.add(newcont); mycontactsadapter.notifydatasetchanged();// let adapter know changing in our list toast.maketext(getapplicationcontext(), "you added " + nameline.gettext().tostring() + " contact list", toast.length_short).show(); return; } toast.maketext(getapplicationcontext(), nameline.gettext().tostring() + " exist in list", toast.length_short).show(); nameline.settext(""); phoneline.settext(""); emailline.settext(""); addressline.settext(""); contactimage.setimageresource(r.drawable.no_logo); } }); //contactimageevent contactimage.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) {// defining chooser intent intent = new intent();// intent object passes messeges in our system intent.settype("image/*");// set explicit mime data type. intent.setaction(intent.action_get_content);//allow user select particular kind of data , return it. startactivityforresult(intent.createchooser(intent, "select contact image"), 1); } }); //populate list such our list view show contact in pur database // synchronized our database if (contacsdb.getcontactscount() > 0) mycontactlist.addall(contacsdb.getallcontacts()); populatelist();// write contact added list's screen } //special method moment create menu fields public void oncreatecontextmenu(contextmenu mymenu, view myview,contextmenu.contextmenuinfo menuinfo){ super.oncreatecontextmenu(mymenu,myview,menuinfo); mymenu.setheadericon(r.drawable.edit_icon); mymenu.setheadertitle("contact options"); mymenu.add(menu.none,edit,mymenu.none,"edit contact"); mymenu.add(menu.none,delete,mymenu.none,"delete contact"); } public boolean oncontextitemselected(menuitem myitem){ switch(myitem.getitemid()){ case edit: intent movetoedit= new intent(this,editcontactactivity.class); string[] argtopass={string.valueof(mycontactlist.get(longcclickelemnt).getid()),mycontactlist.get(longcclickelemnt).getname(), mycontactlist.get(longcclickelemnt).getphone(), mycontactlist.get(longcclickelemnt).getemail(), mycontactlist.get(longcclickelemnt).getaddress(),string.valueof(mycontactlist.get(longcclickelemnt).getimageuri())}; movetoedit.putextra("args",argtopass); startactivityforresult(movetoedit,2); break; case delete: //longcclickelemnt represents position of item clicked on in our listview // , initilized every setonitemlongclicklistener contacsdb.deletecontact(mycontactlist.get(longcclickelemnt));//remove database mycontactlist.remove(longcclickelemnt);// remove list mycontactsadapter.notifydatasetchanged();// update database instantly break; } return super.oncontextitemselected(myitem); } //handling result of clicking contact image(created reply startactivityforresult function ) public void onactivityresult(int requestcode, int resultcode, intent data) { if (resultcode == result_ok) { switch (requestcode) { case 1:// comeback image collecting screen imageuri = data.getdata(); contactimage.setimageuri(data.getdata());//sets content of imageview specified uri. break; case 2://comeback edit contact screen string[] contactdetails=data.getstringarrayextra("result"); contacsdb.updatecontact(new contact(integer.parseint(contactdetails[0]), contactdetails[1], contactdetails[2], contactdetails[3],contactdetails[4], uri.parse(contactdetails[5])));//update datatbase operation mycontactlist.get(longcclickelemnt).setall(contactdetails[1], contactdetails[2], contactdetails[3],contactdetails[4], uri.parse(contactdetails[5])); mycontactsadapter.notifydatasetchanged();// update database instantly toast.maketext(getapplicationcontext(),"changes saved!",toast.length_short).show(); break; } } } // special adapter helps display data in ui element, extending array adapter class private class contactlistadapter extends arrayadapter<contact> { public contactlistadapter() { super(mainactivity.this, r.layout.contact_layout, mycontactlist); } @override public view getview(int position, view myview, viewgroup parent) {//adding contact in position our contactlist screen if (myview == null) myview = getlayoutinflater().inflate(r.layout.contact_layout, parent, false); contact currcontact = mycontactlist.get(position); textview name = myview.findviewbyid(r.id.contact_name_store); name.settext(currcontact.getname()); textview phone = myview.findviewbyid(r.id.phone_store); phone.settext(currcontact.getphone()); textview email = myview.findviewbyid(r.id.email_store); email.settext(currcontact.getemail()); textview address = myview.findviewbyid(r.id.address_store); address.settext(currcontact.getaddress()); imageview contactimage = myview.findviewbyid(r.id.imageviewonlayput); contactimage.setimageuri(currcontact.getimageuri()); return myview; } } // write inside mylistview of adapter private void populatelist() { mycontactsadapter = new contactlistadapter(); mylistview.setadapter(mycontactsadapter); } //check if one's email address valid public static boolean isvalidemaillid(string email) { return !textutils.isempty(email) && android.util.patterns.email_address.matcher(email).matches(); } private boolean contactexist(contact c) { string c_name = c.getname(); int count = mycontactlist.size(); (int = 0; < count; i++) { if (mycontactlist.get(i).getname().comparetoignorecase(c_name) == 0) return true; } return false; } } databasehandler.class
package org.intracode.contactmanager; import android.content.contentvalues; import android.content.context; import android.database.cursor; import android.database.sqlite.sqlitedatabase; import android.database.sqlite.sqliteopenhelper; import android.net.uri; import java.util.arraylist; import java.util.list; /** * created johnny manson on 19.01.14. */ public class databasehandler extends sqliteopenhelper { private static final int database_version = 1; private static final string database_name = "contactmanager", table_contacts = "contacts", key_id = "id", key_name = "name", key_phone = "phone", key_email = "email", key_address = "address", key_imageuri = "imageuri"; public databasehandler(context context) { super(context, database_name, null, database_version); } @override public void oncreate(sqlitedatabase db) { db.execsql("create table " + table_contacts + "(" + key_id + " integer primary key autoincrement," + key_name + " text," + key_phone + " text," + key_email + " text," + key_address + " text," + key_imageuri + " text)"); } @override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { db.execsql("drop table if exists " + table_contacts); oncreate(db); } public void createcontact(contact contact) { sqlitedatabase db = getwritabledatabase(); contentvalues values = new contentvalues(); values.put(key_name, contact.getname()); values.put(key_phone, contact.getphone()); values.put(key_email, contact.getemail()); values.put(key_address, contact.getaddress()); values.put(key_imageuri, string.valueof(contact.getimageuri())); db.insert(table_contacts, null, values); db.close(); } public contact getcontact(int id) { sqlitedatabase db = getreadabledatabase(); cursor cursor = db.query(table_contacts, new string[] { key_id, key_name, key_phone, key_email, key_address, key_imageuri }, key_id + "=?", new string[] { string.valueof(id) }, null, null, null, null ); if (cursor != null) cursor.movetofirst(); contact contact = new contact(integer.parseint(cursor.getstring(0)), cursor.getstring(1), cursor.getstring(2), cursor.getstring(3), cursor.getstring(4), uri.parse(cursor.getstring(5))); db.close(); cursor.close(); return contact; } public void deletecontact(contact contact) { sqlitedatabase db = getwritabledatabase(); db.delete(table_contacts, key_id + "=?", new string[] { string.valueof(contact.getid()) }); db.close(); } public int getcontactscount() { sqlitedatabase db = getreadabledatabase(); cursor cursor = db.rawquery("select * " + table_contacts, null); int count = cursor.getcount(); db.close(); cursor.close(); return count; } public int updatecontact(contact contact) { sqlitedatabase db = getwritabledatabase(); contentvalues values = new contentvalues(); values.put(key_name, contact.getname()); values.put(key_phone, contact.getphone()); values.put(key_email, contact.getemail()); values.put(key_address, contact.getaddress()); values.put(key_imageuri, contact.getimageuri().tostring()); int rowsaffected = db.update(table_contacts, values, key_id + "=?", new string[] { string.valueof(contact.getid()) }); db.close(); return rowsaffected; } public list<contact> getallcontacts() { list<contact> contacts = new arraylist<contact>(); sqlitedatabase db = getwritabledatabase(); cursor cursor = db.rawquery("select * " + table_contacts, null); if (cursor.movetofirst()) { { contacts.add(new contact(integer.parseint(cursor.getstring(0)), cursor.getstring(1), cursor.getstring(2), cursor.getstring(3), cursor.getstring(4), uri.parse(cursor.getstring(5)))); } while (cursor.movetonext()); } cursor.close(); db.close(); return contacts; } } editactivity.class
package org.intracode.contactmanager; import android.app.activity; import android.content.intent; import android.net.uri; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.text.editable; import android.text.textwatcher; import android.view.view; import android.widget.button; import android.widget.edittext; import android.widget.imageview; import android.widget.toast; public class editcontactactivity extends appcompatactivity { //live appearances in screen objects edittext editname, editphone, editemail, editaddress; button editbutton; imageview editimage; uri imageuri = uri.parse("android.resource://org.intracode.contactmanager/drawable/no_logo.png");// including assigning @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_edit_contact); //assigning fields editname = (edittext) findviewbyid(r.id.editname); editphone = (edittext) findviewbyid(r.id.editphone); editemail = (edittext) findviewbyid(r.id.editemail); editaddress = (edittext) findviewbyid(r.id.editaddress); editbutton = (button) findviewbyid(r.id.editbutton); editimage = (imageview) findviewbyid(r.id.editimage); // getting passed arguments string[] passedarg = getintent().getstringarrayextra("args"); editname.settext(passedarg[1]); editphone.settext(passedarg[2]); editemail.settext(passedarg[3]); editaddress.settext(passedarg[4]); editimage.setimageuri(uri.parse(passedarg[5])); //events editname.addtextchangedlistener(new textwatcher() { @override public void beforetextchanged(charsequence charsequence, int i, int i1, int i2) { } @override public void ontextchanged(charsequence charsequence, int i, int i1, int i2) { string email = charsequence.tostring().trim(); editbutton.setenabled(string.valueof(editname.gettext()).trim().length() > 0 && mainactivity.isvalidemaillid(email)); } @override public void aftertextchanged(editable editable) { } }); // email event editemail.addtextchangedlistener(new textwatcher() { string emailstring = editemail.gettext().tostring().trim(); @override public void beforetextchanged(charsequence charsequence, int i, int i1, int i2) { } @override public void ontextchanged(charsequence charsequence, int i, int i1, int i2) { string email = charsequence.tostring().trim(); editbutton.setenabled(editname.gettext().tostring().trim().length() > 0 && mainactivity.isvalidemaillid(email)); } @override public void aftertextchanged(editable editable) { } }); //buttonevent editbutton.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) { intent returnintent = new intent(); string[] passedarg = getintent().getstringarrayextra("args"); string[] argtoreturn = {passedarg[0], string.valueof(editname.gettext()), string.valueof(editphone.gettext()), string.valueof(editemail.gettext()), string.valueof(editaddress.gettext()), string.valueof(editimage)}; returnintent.putextra("result", argtoreturn); setresult(activity.result_ok, returnintent); finish(); } }); editimage.setonclicklistener(new view.onclicklistener() { @override public void onclick(view view) {// defining chooser intent intent = new intent();// intent object passes messeges in our system intent.settype("image/*");// set explicit mime data type. intent.setaction(intent.action_get_content);//allow user select particular kind of data , return it. startactivityforresult(intent.createchooser(intent, "select contact image"), 1); } }); } public void onactivityresult(int requestcode, int resultcode, intent data) { if (resultcode == result_ok) { switch (requestcode) { case 1:// comeback image collecting screen imageuri = data.getdata(); editimage.setimageuri(data.getdata());//sets content of imageview specified uri. } } } } contact class
package org.intracode.contactmanager; import android.net.uri; import java.net.uri; /** * created roey on 09/08/2017. */ public class contact { private string name ,email, phone, address; private uri imageuri; private int id;// added database manners public contact(int id,string name ,string phone,string email,string address,uri imageuri){ this.id=id; this.name=name; this.email=email; this.phone=phone; this.address=address; this.imageuri=imageuri; } //getters public string getname(){ return name; } public string getemail(){ return email; } public string getphone(){ return phone; } public string getaddress(){ return address; } public uri getimageuri(){ return imageuri; } public int getid(){ return id; } //setters public void setall(string name,string phone,string email,string address,uri imageuri){ this.name=name; this.email=email; this.phone=phone; this.address=address; this.imageuri=imageuri; } }
Comments
Post a Comment