java - Where to create the ArrayList inside my cycle? -
i've cycle retrieve data local database on android phone , i'm quite sure problem within listbackupcontacts
array.
this database structure:
my objective backupcontacts , metadata database.
public arraylist<backup> getallbackupcontacts() throws unsupportedencodingexception { final sqlitedatabase db = getreadabledatabase(); final string selectquery = "select * " + backup_table_name + ", " + backupcontacts_table_name + " " + backup_table_name+"."+backup_id + " = " + backupcontacts_table_name+"."+backupcontacts_id_backup_fk; final cursor cursor = db.rawquery(selectquery, null); arraylist<backup> listbackupstoreturn = new arraylist<backup>(); arraylist<backupcontact> listbackupcontacts = new arraylist<backupcontact>(); // shall create arraylist inside cycle? if(cursor.movetofirst()) { integer aux = 0; do{ final integer idbackup = cursor.getint(0); final long timestamp = cursor.getlong(1); final integer contactscount = cursor.getint(2); final string description = cursor.getstring(3); final integer restorecount = cursor.getint(4); final integer idbackupcontact = cursor.getint(5); final string vcard = new string(cursor.getblob(7), "utf-8"); final string displayname = cursor.getstring(8); if(aux != idbackup) { backup backup = new backup(); backupinfo backupinfo = new backupinfo(idbackup, description, contactscount, restorecount, timestamp); if(!listbackupcontacts.isempty()) { backup.setbackupcontacts(listbackupcontacts); listbackupstoreturn.add(backup); listbackupcontacts.clear(); aux = idbackup; } backupcontact backupcontact = new backupcontact(idbackupcontact, idbackup, vcard, displayname); listbackupcontacts.add(backupcontact); backup.setbackupinfo(backupinfo); } else { backupcontact backupcontact = new backupcontact(idbackupcontact, idbackup, vcard, displayname); listbackupcontacts.add(backupcontact); aux = idbackup; } } while(cursor.movetonext()); } return listbackupstoreturn; }
my method working fine metadata (table backup) backupcontacts repeating same value.
here output:
idbackup info: 1 || timestamp info: 1395407411 || description info: feito por mim || contactscount info: 1 || restorecount info: 0 idbackup: 4 || idbackupcontacts: 13 || vcard: vcard 0 || displayname: marco 0 idbackup: 4 || idbackupcontacts: 14 || vcard: vcard 1 || displayname: marco 1 idbackup: 4 || idbackupcontacts: 15 || vcard: vcard 2 || displayname: marco 2 idbackup: 4 || idbackupcontacts: 16 || vcard: vcard 3 || displayname: marco 3 ---------------------------------------------------------------------- idbackup info: 2 || timestamp info: 1395407411 || description info: backup segundo || contactscount info: 1 || restorecount info: 0 idbackup: 4 || idbackupcontacts: 13 || vcard: vcard 0 || displayname: marco 0 idbackup: 4 || idbackupcontacts: 14 || vcard: vcard 1 || displayname: marco 1 idbackup: 4 || idbackupcontacts: 15 || vcard: vcard 2 || displayname: marco 2 idbackup: 4 || idbackupcontacts: 16 || vcard: vcard 3 || displayname: marco 3 ---------------------------------------------------------------------- idbackup info: 3 || timestamp info: 1395407411 || description info: backup terceiro || contactscount info: 1 || restorecount info: 0 idbackup: 4 || idbackupcontacts: 13 || vcard: vcard 0 || displayname: marco 0 idbackup: 4 || idbackupcontacts: 14 || vcard: vcard 1 || displayname: marco 1 idbackup: 4 || idbackupcontacts: 15 || vcard: vcard 2 || displayname: marco 2 idbackup: 4 || idbackupcontacts: 16 || vcard: vcard 3 || displayname: marco 3 ---------------------------------------------------------------------- idbackup info: 4 || timestamp info: 1395407411 || description info: backup quarto || contactscount info: 1 || restorecount info: 0 idbackup: 4 || idbackupcontacts: 13 || vcard: vcard 0 || displayname: marco 0 idbackup: 4 || idbackupcontacts: 14 || vcard: vcard 1 || displayname: marco 1 idbackup: 4 || idbackupcontacts: 15 || vcard: vcard 2 || displayname: marco 2 idbackup: 4 || idbackupcontacts: 16 || vcard: vcard 3 || displayname: marco 3
here ouput code:
try { arraylist<backup> list = dt.getallbackupcontacts(); for(int = 0; i<list.size(); i++) { log.d(tag, "----------------------------------------------------------------------"); backup backup = list.get(i); backupinfo backupinfo = backup.getbackupinfo(); arraylist<backupcontact> backupcontacts = backup.getlistofbackupcontacts(); log.d(tag, "idbackup info: " + backupinfo.getidbackup() + " || timestamp info: " + backupinfo.gettimestamp() + " || description info: " + backupinfo.getdescription() + " || contactscount info: " + backupinfo.getcontactscount() + " || restorecount info: " + backupinfo.getrestorecount()); for(int j = 0; j<backupcontacts.size(); j++) { backupcontact backupcontact = backupcontacts.get(j); log.d(tag, "idbackup: " + backupcontact.getidbackup() + " || idbackupcontacts: " + backupcontact.getidbackupscontact() + " || vcard: " + backupcontact.getvcard() + " || displayname: " + backupcontact.getdisplayname()); } } } catch (unsupportedencodingexception e) { e.printstacktrace(); }
here data in database:
i understand problem i'm doing .clear()
on array. need re-create each entry in backup table can't see shall create arraylist. if create inside do {} while()
cycle i'll creating 1 each line in database, not need.
can point me out shall put arraylist<backupcontact> listbackupcontacts = new arraylist<backupcontact>();
?
to answer question, try replacing listbackupcontacts.clear()
listbackupcontacts = new arraylist<backupcontact>()
+ other mods (see below)
i can't see how else you'd around issue of single listbackupcontents object being assigned final set of values (where idbackup==4).
arraylist<backupcontact> listbackupcontacts = null; // don't create yet if(cursor.movetofirst()) { integer aux = 0; do{ final integer idbackup = cursor.getint(0); final long timestamp = cursor.getlong(1); final integer contactscount = cursor.getint(2); final string description = cursor.getstring(3); final integer restorecount = cursor.getint(4); final integer idbackupcontact = cursor.getint(5); final string vcard = new string(cursor.getblob(7), "utf-8"); final string displayname = cursor.getstring(8); if(aux != idbackup) { backup backup = new backup(); backupinfo backupinfo = new backupinfo(idbackup, description, contactscount, restorecount, timestamp); listbackupcontacts = new arraylist<backupcontact>(); backup.setbackupcontacts(listbackupcontacts); listbackupstoreturn.add(backup); backup.setbackupinfo(backupinfo); aux = idbackup; } backupcontact backupcontact = new backupcontact(idbackupcontact, idbackup, vcard, displayname); listbackupcontacts.add(backupcontact); } while(cursor.movetonext()); } return listbackupstoreturn;
}
Comments
Post a Comment