Autore Topic: ListView database  (Letto 248 volte)

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
ListView database
« il: 10 Marzo 2015, 00:05:42 CET »
0
Nella prima colonna della ListView visualizzo un array che contiene tutte le ore del giorno, e nella seconda colonna Voglio visualizzare gli orari memorizzati nel database. (lo scopo è quello di visualizzare gli orari del db a fianco dell'array orario, per esempio
"orari"      "db"
8:00
8:30       8:30
9:00       9:00
9:30       9:30
10:00

Funziona solamente se il database non è vuoto, altrimenti ottengo una eccezione degli indici...
Come posso aggirare questo problema? grazie

Codice (Java): [Seleziona]
private class Dettaglio {
    String id;      
    String ora;
}
static final String[] orari = new String[]{
            "8:00", "8:30", "9:00", "9:30", "10:00"};

private void prova() {
    //converto il calendario per la query
        SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd");
        String strDate = simpleFormat.format(calendar.getTime());

        final List<Dettaglio> dettagli = new ArrayList<appuntamenti.Elenco_appuntamentiFragment.Dettaglio>(25);
        SQLiteDatabase db = new DatabaseHelper(getActivity()).getReadableDatabase();
        // converto array a lista
        List<String> lList = Arrays.asList(orari);
        // iterator loop
        Iterator<String> iterator = lList.iterator();
        while (iterator.hasNext()) {
            String orari_array = (iterator.next());
            String tabella_op = "SELECT m.id_cliente, m.data, m.ora, c.nome, c.cognome FROM Movimenti m LEFT JOIN Clienti" +
                    " c ON (m.id_cliente = c._id) AND m.ora LIKE '" + orari_array + "' AND m.data LIKE '" + strDate + "'";
            Cursor cur = db.rawQuery(tabella_op, null);
            while (cur.moveToNext()) {
                Dettaglio d = new Dettaglio();
                d.id = cur.getString(0);
                d.data = cur.getString(1);
                d.ora = cur.getString(2);              
                dettagli.add(d);

            }
            cur.close();
        }
        db.close();

    ListAdapter adapter = new ArrayAdapter<String>(getActivity(), R.layout.appuntamenti_row, R.id.timeText, orari) {

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View row = super.getView(position, convertView, parent);

            String ore = orari[position];
            TextView tvMonth = (TextView) row.findViewById(R.id.timeText);
            tvMonth.setText(ore);

            TextView tvAppuntamento;
            tvAppuntamento = (TextView) row.findViewById(R.id.eventText);
            Dettaglio d = new Dettaglio();
            tvAppuntamento.setText(d.ora);

            return row;
        }
    };
    list.setAdapter(adapter);
}

Offline LonelyWolf

  • Utente junior
  • **
  • Post: 148
  • Respect: +12
    • Mostra profilo
    • Traversate dei laghi
  • Dispositivo Android:
    GT-I9505, ALE-L21
  • Sistema operativo:
    Windows 7 32/64
Re:ListView database
« Risposta #1 il: 10 Marzo 2015, 12:21:28 CET »
0
DEVI fare un test per controllare se la query ha restituito dei risultati, è il controllo minimo quando si lavora con i database.

Codice: [Seleziona]
if (cur.getCount()>0) {
   //qua fai il ciclo per recuperare i dati
}
Se la mia risposta ti è utile, per favore un thanks!

Offline JCC

  • Utente junior
  • **
  • Post: 99
  • Respect: +1
    • Mostra profilo
Re:ListView database
« Risposta #2 il: 10 Marzo 2015, 15:03:23 CET »
0
grazie, ho risolto facendo quel test sulla classe "dettaglio".

Offline LonelyWolf

  • Utente junior
  • **
  • Post: 148
  • Respect: +12
    • Mostra profilo
    • Traversate dei laghi
  • Dispositivo Android:
    GT-I9505, ALE-L21
  • Sistema operativo:
    Windows 7 32/64
Re:ListView database
« Risposta #3 il: 10 Marzo 2015, 15:11:16 CET »
+1
un thanks?
:D
Se la mia risposta ti è utile, per favore un thanks!