Id tabella database Android

di il
29 risposte

29 Risposte - Pagina 2

  • Re: Id tabella database Android

    Non è difficile: il primo operatore avrà associata una data che è quella di oggi (oggi + 0 giorni) , il secondo avrà associata una data che è domani (cioè oggi + 1 giorno), il terzo avrà dopodomani (oggi + 2 giorni) e così via. Quello che devi fare è semplicemente associare la data giusta alla persona giusta
  • Re: Id tabella database Android

    Boh, sarò scemo io, ma, setto il calendario ad oggi:Calendar startTime = Calendar.getInstance(); e ad ogni iterazione aggiungo il numero della riga dell'array al calendario: startTime = Calendar.getInstance();
    startTime.add(Calendar.DATE, i);
    , ma non funziona, mi vengono raggruppati tutti gli eventi al quarto giorno, il codice completo della lista:
    
    @Override
        public List<WeekViewEvent> onMonthChange(int newYear, int newMonth) {
            //converto il calendario per la query
            SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd");
            final String strDate = simpleFormat.format(calendar.getTime());
            // Populate the week view with some events.
            List<WeekViewEvent> events = new ArrayList<WeekViewEvent>();
            SQLiteDatabase db = new DatabaseHelper(getActivity()).getReadableDatabase();
            String tabella_op = "SELECT m.id_operatore, " +
                    "m.data, " +
                    "m.ora_inizio, " +
                    "m.minuti_inizio, " +
                    "m.ora_fine, " +
                    "m.minuti_fine, " +
                    "m.id_servizio, " +
                    "c._id, " +
                    "c.nome, " +
                    "c.cognome, " +
                    "o.nome, " +
                    "s.colore " +
                    "FROM Movimenti m " +
                    "LEFT JOIN Clienti c ON (m.id_cliente = c._id) " +
                    "LEFT JOIN Servizi s ON (m.id_servizio = s._id) " +
                    "LEFT JOIN Operatori o ON (o._id = m.id_operatore) " +
                    "AND m.data LIKE '" + strDate + "'";
            Cursor cur = db.rawQuery(tabella_op, null);
            while (cur.moveToNext()) {
    
                id_operator = cur.getString(0);
                dat = cur.getString(1);
                ora_iniz = cur.getInt(2);
                minuto_iniz = cur.getInt(3);
                ora_fin = cur.getInt(4);
                minuto_fin = cur.getInt(5);
                id_servizio = cur.getString(6);
                id_client = cur.getString(7);
                nome_cliente = cur.getString(8);
                cognome_cliente = cur.getString(9);
                nome_operatore = cur.getString(10);
                colore_serv = cur.getInt(11);
    
               Calendar startTime = Calendar.getInstance();
                int size = id_op.length;//array id operatori
                for(int i = 0; i< size; i++){
                    startTime = Calendar.getInstance();
                    startTime.add(Calendar.DATE, i);
                }
    
    //inizio
                startTime.set(Calendar.HOUR_OF_DAY, ora_iniz);
                startTime.set(Calendar.MINUTE, minuto_iniz);
                startTime.set(Calendar.MONTH, newMonth - 1);
                startTime.set(Calendar.YEAR, newYear);
                //fine
                Calendar endTime = (Calendar) startTime.clone();
                endTime.set(Calendar.HOUR_OF_DAY, ora_fin);
                endTime.set(Calendar.MINUTE, minuto_fin);
    
    //setto la weekview
                WeekViewEvent event = new WeekViewEvent(1, getEventTitle(startTime), startTime, endTime);
                event.setColor(colore_serv);
                events.add(event);
            }
            cur.close();
            db.close();
            return events;
        }
    
  • Re: Id tabella database Android

    Ora che ho visto il codice completo è decisamente più chiaro quali sono i tuoi problemi.
    Poiché esegui tutte le operazioni dentro al while allora l'array op_id è assolutamente inutile, in quanto vai ad operare riga per riga (cioè operatore per operatore).

    Di conseguenza il tuo codice dovrà essere qualcosa del tipo:
    
    @Override
    public List<WeekViewEvent> onMonthChange(int newYear, int newMonth) {
        // fai le tua query
        ....
        int position = 0;
        while (cur.moveToNext()) {
            // ottieni id_operator e tutti gli altri campi
            ...
            Calendar startTime = Calendar.getInstance();
    
            // metti l'operatore nella posizione giusta
            startTime.add(Calendar.DATE, position);
    
            startTime.set(Calendar.HOUR_OF_DAYY, ora_iniz);
            // fai tutti gli altri set
            ...
            endTime.set(Calendar.MINUTE, minuto_fin);
    
            // setti la weekview
            ...
    
            // incrementi la posizione
            position++;
        }
    }
    
  • Re: Id tabella database Android

    Quindi ora mi manca assegnare l'operatore alla "position" prima di aggiungerlo alla data giusto?
    Per fare questo dovrei contarli durante la query senza usare l'array giusto?
  • Re: Id tabella database Android

    Il fatto di associare l'operatore alla position lo fai con questa riga:
    
    // metti l'operatore nella posizione giusta
    startTime.add(Calendar.DATE, position);
    La variabile position parte da zero e ad ogni iterazione sul Cursor (quindi ad ogni nuova riga prelevata dal DB) viene incrementata; quindi è un modo per associare l'operatore al giorno.
  • Re: Id tabella database Android

    Provando il codice con le tue modifiche....ho inserito un Log.d per vedere cosa esce dalla "position".

    Non sembra la strada giusta, perchè la query cerca su diverse tabelle, tra cui la tabella "movimenti" che potrebbe avere molti record, quindi la position non si incrementa in base al numero degli operatori nella tabella "operatori" ma di quella "movimenti" e quindi la variabile si incremaìenta erroneamente.

    Dovrò uscirne prima o poi
  • Re: Id tabella database Android

    Aspetta mi sto un po' incasinando
    Allora la cosa che deve essere ordinata sono gli operatori, quindi ti serve un modo per poterli ordinare. La query ti restituisce tutti gli eventi pianificati, che possono appartenere a più operatori.

    Potresti provare ad aggiungere alla query un ordinamento in base all'id dell'operatore, in modo da ottenere come risultato un elenco di righe in cui gli eventi dello stesso operatore sono messi tutti vicini. In questo modo puoi tenere traccia dell'id dell'ultimo operatore che hai inserito nella view: se il nuovo operatore è uguale al vecchio allora non devi cambiare data, altrimenti devi incrementarla di 1
  • Re: Id tabella database Android

    Ok, ultima cosa, al click del button incremento la data del calendario.
    
    btnAvanti.setOnClickListener(new OnClickListener() {
     @Override
            public void onClick(View v) {
            calendar.set(Calendar.DATE, 1);
     }
        });
    
    con la data dello stesso calendario eseguo la query del db nella lista:
    
    @Override
        public List<WeekViewEvent> onMonthChange(int newYear, int newMonth) {
            //converto il calendario per la query
            SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd");
            final String strDate = simpleFormat.format(calendar.getTime());
            // Populate the week view with some events.
            List<WeekViewEvent> events = new ArrayList<WeekViewEvent>();
            SQLiteDatabase db = new DatabaseHelper(getActivity()).getReadableDatabase();
            String tabella_op = "SELECT m.id_operatore....... AND m.data LIKE '" + strDate + "'....
    ...
    ...
    
    ora come faccio a riavviare ogni volta la lista ad ogni click???
  • Re: Id tabella database Android

    Cosa intendi con "riavviare la lista"?


    Inviato dal mio iPhone utilizzando Tapatalk
  • Re: Id tabella database Android

    Clicco il bottone, aggiungo un giorno al calendario e la query nella lista deve essere riavviata per ottenere i dati di del giorno che gli passo. C'è un modo?
  • Re: Id tabella database Android

    Mah in teoria essendo una view dovrebbe avere il metodo invalidate() che serve per richiedere al sistema di ridisegnarla


    Inviato dal mio iPhone utilizzando Tapatalk
  • Re: Id tabella database Android

    Il metodo invalidate() c'è nella View:
    
    @Override
        public void invalidate() {
            super.invalidate();
            mAreDimensionsInvalid = true;
        }
    
    lo richiamo nel Fragment, ma non succede nulla:
    
    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.elenco_appuntamenti, container, false);
            setHasOptionsMenu(true);
            getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    
     mWeekView = (WeekView) rootView.findViewById(R.id.weekView);
     mWeekView.setOnEventClickListener(this);
    mWeekView.setEmptyViewClickListener(this);
     mWeekView.setMonthChangeListener(this);
    mWeekView.setEventLongPressListener(this);
    --
    --
     btnAvanti.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {//aggiungo un giorno ogni click
                    calendar.add(Calendar.DATE, 1);
                    SimpleDateFormat postFormater = new SimpleDateFormat("EEEE dd MMM yyyy");
                    String avanti_day = postFormater.format(calendar.getTime()); 
                    //se la data è uguale a oggi inserisco la scritta oggi
                    if (calendarCompare.getTime().equals(calendar.getTime())) {
                        dataHedad.setText("OGGI  " + avanti_day);
                    } else {
                        dataHedad.setText(avanti_day);
                    }
                    mWeekView.invalidate();
    
                }
            });
    
    
  • Re: Id tabella database Android

    In teoria quel metodo dovrebbe fare in modo che il metodo onDraw venga richiamato in futuro, quindi dovrebbe essere quello che cerchi!


    Inviato dal mio iPhone utilizzando Tapatalk
  • Re: Id tabella database Android

    Ok, fatto.
    Davvero l'ultima cosa:
    Ora devo settare il calendario con la data di ogni evento preso dal db.

    Nel db ho memorizzato la data con il formato"yyyy-mm-dd", per ottenere il giorno da questa data ho utilizzato il metodo substring()(per ora faccio così, poi vedrò se memorizzare la data in altro modo).
    Quindi, prima di leggere ogni record imposto il calendario alla data odierna, leggo la data dal db e la setto al calendario ma non ottengo il risultato sperato, cioè viene assegnato solo il primo evento.
    Sbaglio qualcosa con il calendario?
    
     @Override
        public List<WeekViewEvent> onMonthChange(int newYear, int newMonth) {
            //converto il calendario per la query
            SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd");
            final String strDate = simpleFormat.format(calendar.getTime());
            // Populate the week view with some events.
            List<WeekViewEvent> events = new ArrayList<WeekViewEvent>();
            SQLiteDatabase db = new DatabaseHelper(getActivity()).getReadableDatabase();
            String tabella_op = "SELECT m.id_operatore, " +
                    "m.data, " +
                    "m.ora_inizio, " +
                    "m.minuti_inizio, " +
                    "m.ora_fine, " +
                    "m.minuti_fine, " +
                    "m.id_servizio, " +
                    "c._id, " +
                    "c.nome, " +
                    "c.cognome, " +
                    "o.nome, " +
                    "s.colore " +
                    "FROM Movimenti m " +
                    "LEFT JOIN Clienti c ON (m.id_cliente = c._id) " +
                    "LEFT JOIN Servizi s ON (m.id_servizio = s._id) " +
                    "LEFT JOIN Operatori o ON (o._id = m.id_operatore) " +
                    "AND m.data LIKE '" + strDate + "' ORDER BY m.id_operatore ASC";
    
    Cursor cur = db.rawQuery(tabella_op, null);
            while (cur.moveToNext()) {
                startTime = Calendar.getInstance();
    
                id_operator = cur.getInt(0);
                dat = cur.getString(1);
                ora_iniz = cur.getInt(2);
                minuto_iniz = cur.getInt(3);
                ora_fin = cur.getInt(4);
                minuto_fin = cur.getInt(5);
                id_servizio = cur.getString(6);
                id_client = cur.getString(7);
                nome_cliente = cur.getString(8);
                cognome_cliente = cur.getString(9);
                nome_operatore = cur.getString(10);
                colore_serv = cur.getInt(11);
    
     //RICAVO GIORNO MESE E ANNO DALLA DATA NEL DB
                int giorno_ok = Integer.parseInt(dat.substring(8, 10));
               
                int mese_ok = Integer.parseInt(dat.substring(5, 7));
               
                int anno_ok = Integer.parseInt(dat.substring(0, 4));
               
               startTime.add(Calendar.DAY_OF_MONTH, giorno_ok);
    
                 /**
                 * PER ORA HO 3 OPERATORI, ASSEGNO GLI EVENTI AD OGNI OPERARTORE
                 */
                if(id_operator == 1){
                    startTime = Calendar.getInstance();
                }else if(id_operator == 2){
                    startTime.add(Calendar.DATE, 1);
                }else if(id_operator == 3){
                    startTime.add(Calendar.DATE, 2);
                }
    
    //inizio
                startTime.set(Calendar.HOUR_OF_DAY, ora_iniz);
                startTime.set(Calendar.MINUTE, minuto_iniz);
                startTime.set(Calendar.MONTH, newMonth-1);
                startTime.set(Calendar.YEAR, newYear);
                //fine
                Calendar endTime = (Calendar) startTime.clone();
                endTime.set(Calendar.HOUR_OF_DAY, ora_fin);
                endTime.set(Calendar.MINUTE, minuto_fin);
                //endTime.set(Calendar.MONTH, newMonth-1);
                //endTime.set(Calendar.YEAR, newYear);
    
                //setto la weekview
                WeekViewEvent event = new WeekViewEvent(1, getEventTitle(startTime), startTime, endTime);
                event.setColor(colore_serv);
                events.add(event);
            }
            cur.close();
            db.close();
            return events;
        }
    
  • Re: Id tabella database Android

    Secondo me è perché con le seguenti righe sovrascrivi il valore che ti eri calcolato prima
    /**
                 * PER ORA HO 3 OPERATORI, ASSEGNO GLI EVENTI AD OGNI OPERARTORE
                 */
                if(id_operator == 1){
                    startTime = Calendar.getInstance();
                }else if(id_operator == 2){
                    startTime.add(Calendar.DATE, 1);
                }else if(id_operator == 3){
                    startTime.add(Calendar.DATE, 2);
                }
Devi accedere o registrarti per scrivere nel forum
29 risposte