Autore Topic: Inserimento Date  (Letto 743 volte)

Offline C_G

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Inserimento Date
« il: 30 Gennaio 2014, 17:24:15 CET »
0
Stò inserendo la data nel db, precisamente, scelto un range di date inserisco un record ogni mese.
Il problema è che l'ultimo record viene inserito 2 volte e non capisco perchè:
Codice (Java): [Seleziona]
Calendar dateAndTime=Calendar.getInstance();
Calendar dateAndTime1=Calendar.getInstance();
...
 public void date(View v) {
SimpleDateFormat sdf1 = new SimpleDateFormat( "yyyy-MM-dd" );
   for(int i=0; dateAndTime.getTime().before(dateAndTime1.getTime()); i++) {
                dateAndTime.add(Calendar.MONTH, 1);
                                                               
        if (dateAndTime.getTime().before(dateAndTime1.getTime())) {
                       
                        String strDate = sdf1.format(dateAndTime.getTime() );
                        cv.put(TabellaTable.DATA, strDate);  
}
SQLiteDatabase db = mHelper.getWritableDatabase();
 //Aggiungo una nuova entry
        boolean inserite1 = false;
                        if (!inserite1){
                                long result = db.insert(TabellaTable.TABLE_NAME, null, cv);
                                                               
                                if (result > 0){
                                        inserite1 = true;
                                                                }
                                                        }
                                                       
                                                        if (inserite1){
                                                               
                                        //Toast.makeText(this, getString(R.string.Toast_ok) , Toast.LENGTH_SHORT).show();
                                                        }
                }
                         
                db.close();
   

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Inserimento Date
« Risposta #1 il: 30 Gennaio 2014, 18:08:15 CET »
0
Se volevi rendere più difficile il quesito spaginando l'indentazione, ci sei riuscito.
Ho dovuto copiare il codice in un editor e indentarlo.  ;-)

Comunque si tratta di un problema di normale programmazione, la causa è in come hai scritto il codice del ciclo e dentro il ciclo. Mettendo un Log.d() per ciclo lo avresti scoperto in un attimo.

La condizione per ciclare è che la data_A sia antecedente ad un'altra data_B. Poi però nel ciclo ci sommi un mese ed aggiorni il contentvalue solo se la nuova data_A è antecedente alla data_B. Però l'inserimento nel database lo fai lo stesso, qualsiasi sia il risultato dell'if interno al ciclo. Per cui arrivato all'ultimo mese da inserire, l'IF interno al ciclo fallisce per cui non aggiorni il CV (rimane lo stesso dell'ultimo mese) e quindi inserisci nuovamente l'ultimo mese.

Se non vuoi riscrivere il codice in modo più snello, puoi risolvere mettendo l'inserimento nel database tutto all'interno dell'IF interno al ciclo.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline C_G

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Re:Inserimento Date
« Risposta #2 il: 30 Gennaio 2014, 18:54:27 CET »
0
scusami per l'indentazione :-X, ora ho risolto inserendo il "db.insert" all'interno dell'if.

Però a prescindere dal giorno scelto (numero del giorno) viene inserito sempre il 28

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Inserimento Date
« Risposta #3 il: 30 Gennaio 2014, 19:16:31 CET »
0
Però a prescindere dal giorno scelto (numero del giorno) viene inserito sempre il 28

Non vedo codice relativo a giorni in quello che hai postato.

Ma probabilmente accade perchè siamo a Gennaio, oggi è il 30, aggiungi un mese e passi al 28 febbraio (ultimo giorno di febbraio), poi tutti i mesi successivi hanno un giorno 28. Se oggi fosse stato il 13, avresti avuto tutti i 13.

Se vuoi un giorno specifico, devi settare un giorno specifico.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline C_G

  • Utente junior
  • **
  • Post: 69
  • Respect: 0
    • Mostra profilo
Re:Inserimento Date
« Risposta #4 il: 30 Gennaio 2014, 19:19:52 CET »
0
ok, ho capito, grazie mille