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:

enter image description here

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:

enter image description here

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

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -