Autore Topic: Suddivisione per data  (Letto 871 volte)

Offline deideidei

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Ubuntu 11.04
Suddivisione per data
« il: 28 Dicembre 2011, 18:25:19 CET »
0
salve ragazzi , ho creato una classe DB in questa maniera :
Codice (Java): [Seleziona]
package com.deodato.Risparmia;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;

public class MyDatabase {  

    SQLiteDatabase mmDb;
        DbHelper mDbHelper;
        Context mContext;
        private static final String DB_NAME="tutodb";//nome del db
        private static final int DB_VERSION=1; //numero di versione del nostro db
       
        public MyDatabase(Context ctx){
                mContext=ctx;
                mDbHelper=new DbHelper(ctx, DB_NAME, null, DB_VERSION);
                //quando istanziamo questa classe, istanziamo anche l'helper (vedi sotto)      
        }
       
        public void read(){  //il database su cui agiamo è leggibile/scrivibile
                mmDb=mDbHelper.getReadableDatabase();
               
        }
       
        public void open(){  //il database su cui agiamo è leggibile/scrivibile
                mmDb=mDbHelper.getWritableDatabase();
               
        }
       
        public void close(){ //chiudiamo il database su cui agiamo
                mmDb.close();
        }
       
       
        //i seguenti 2 metodi servono per la lettura/scrittura del db. aggiungete e modificate a discrezione
       
        public void insert(String nome ,double d, int identificatore, String data, String categoria, int id_cat, String note ){ //metodo per inserire i dati
                ContentValues cv=new ContentValues();
                //cv.put(ProductsMetaData.ID , id);
                cv.put(ProductsMetaData.IDENT, identificatore);
                cv.put(ProductsMetaData.NOME_KEY, nome);
                cv.put(ProductsMetaData.IMPORTO_KEY, d);
                cv.put(ProductsMetaData.DATA_KEY, data);
                cv.put(ProductsMetaData.CATEGORIA_KEY, categoria);
                cv.put(ProductsMetaData.ID_CAT_KEY, id_cat );
                cv.put(ProductsMetaData.NOTE_KEY, note);
                mmDb.insert(ProductsMetaData.GESTIONE_TABLE, null, cv);
        }
       
       
        public Cursor fetchProducts(){ //metodo per fare la query di tutti i dati
                return mmDb.query(ProductsMetaData.GESTIONE_TABLE, null, null, null, null, null, null);        
        }
       
       public Double get_SUM_Importo(int identificatore){
       String[] parametri = new String[] { Integer.toString(identificatore) };
       Cursor cur = mmDb.rawQuery("SELECT SUM(" + ProductsMetaData.IMPORTO_KEY+") FROM " + ProductsMetaData.GESTIONE_TABLE + " WHERE "+ProductsMetaData.IDENT+"=?", parametri);
       cur.moveToFirst();
       return cur.getDouble(0);                        
        }

        public Cursor soloEnt (){
                return mmDb.rawQuery("select * from " + ProductsMetaData.GESTIONE_TABLE + " where " + ProductsMetaData.IDENT + "=" + 0 , null);
        }
       
        public Cursor soloUsc (){
                return mmDb.rawQuery("select * from " + ProductsMetaData.GESTIONE_TABLE + " where " + ProductsMetaData.IDENT + "=" + 1 , null);
        }
       
        public Cursor byId(int Id)
    {
        return mmDb.rawQuery("select * from " + ProductsMetaData.GESTIONE_TABLE + " where " + ProductsMetaData.ID + "=" + Id  , null);
    }
       
       
        public void update_byID(int id, String nome ,double d, int identificatore, String data, String categoria, int id_cat, String note){
                ContentValues values = new ContentValues();
                values.put(ProductsMetaData.IDENT, identificatore);
                values.put(ProductsMetaData.NOME_KEY, nome);
                values.put(ProductsMetaData.IMPORTO_KEY, d);
                values.put(ProductsMetaData.DATA_KEY, data);
                values.put(ProductsMetaData.CATEGORIA_KEY, categoria);
                values.put(ProductsMetaData.ID_CAT_KEY, id_cat);
                values.put(ProductsMetaData.ENTRATA_NOTE_KEY, note);
                mmDb.update(ProductsMetaData.GESTIONE_TABLE, values, ProductsMetaData.ID+"="+id, null);
        }
       
        static class ProductsMetaData {
               
                 public static final String GESTIONE_TABLE = "products";
                 public static final String ID = "_id";
                 static final String IDENT = "ident";
                 static final String NOTE_KEY = "Note";
                 static final String ID_CAT_KEY = "id_cat";
                 static final String CATEGORIA_KEY = "Categoria";
                 static final String DATA_KEY = "Data";
                 static final String IMPORTO_KEY = "Importo";
                 static final String NOME_KEY = "Nome";
       
        }
       
        public boolean deleteNote(long rowId) {

        return mmDb.delete(ProductsMetaData.GESTIONE_TABLE, ProductsMetaData.ID + "=" + rowId, null) > 0;
    }

        public void deleteNoteall(String rowId) {

         mmDb.delete(ProductsMetaData.GESTIONE_TABLE, rowId, null) ;
    }
       
       
       
        private static final String GESTIONE_TABLE_CREATE = "CREATE TABLE IF NOT EXISTS "  //codice sql di creazione della tabella
               
                     
                      + ProductsMetaData.GESTIONE_TABLE + " ("
                      + ProductsMetaData.ID+ " integer primary key autoincrement, "
                      + ProductsMetaData.IDENT + " integer not null, "
                      + ProductsMetaData.NOME_KEY + " text not null, "
                      + ProductsMetaData.IMPORTO_KEY + " doble not null, "
                      + ProductsMetaData.DATA_KEY + " text not null, "
                      + ProductsMetaData.CATEGORIA_KEY + " text not null, "
                      + ProductsMetaData.ID_CAT_KEY + " integer not null, "
                      + ProductsMetaData.NOTE_KEY + " text not null);";
                 

        private class DbHelper extends SQLiteOpenHelper { //classe che ci aiuta nella creazione del db

                public DbHelper(Context context, String name, CursorFactory factory,int version) {
                        super(context, name, factory, version);
                }

                @Override
                public void onCreate(SQLiteDatabase _db) { //solo quando il db viene creato, creiamo la tabella
                        _db.execSQL(ENTRATA_TABLE_CREATE);
                       
                }
               

                @Override
                public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) {
                        //qui mettiamo eventuali modifiche al db, se nella nostra nuova versione della app, il db cambia numero di versione
                        //Log.w("Example", "Upgrading database, this will drop tables and recreate.");
                // _db.execSQL("DROP TABLE IF EXISTS " + ENTRATA_TABLE_CREATE);
                // onCreate(_db);
                }
       
        }

}

ed ho in un'activity resoconto nella quale visualizzo i dati in questa maniera :
Codice (Java): [Seleziona]
final ListView mList = (ListView) findViewById(R.id.l_list);
        final ListView mList1 = (ListView) findViewById(R.id.l_list1);
       
         
        MyDatabase db=new MyDatabase(getApplicationContext());
       
        db.open();
     
        Cursor c=db.soloEnt();
        startManagingCursor(c);
       
       
          SimpleCursorAdapter adapter=new SimpleCursorAdapter(
                    this, R.layout.product, c,
                    new String[]{  
                                    MyDatabase.ProductsMetaData.IMPORTO_KEY,
                                    MyDatabase.ProductsMetaData.CATEGORIA_KEY,
                                    MyDatabase.ProductsMetaData.ID_CAT_KEY},
                                   
                                    new int[]{ R.id.priceTv1,R.id.priceTv,R.id.imageView11} );
   
            mList.setAdapter(adapter);
           
            Cursor c1=db.soloUsc();
            startManagingCursor(c1);
           
                        SimpleCursorAdapter adapter1=new SimpleCursorAdapter(
                    this, R.layout.product1, c1,
                    new String[]{  
                                    MyDatabase.ProductsMetaData.IMPORTO_KEY,
                                    MyDatabase.ProductsMetaData.CATEGORIA_KEY,
                                    MyDatabase.ProductsMetaData.ID_CAT_KEY},
                                   
                                    new int[]{ R.id.priceTv11,R.id.priceTv1,R.id.imageView111} );
   
            mList1.setAdapter(adapter1);
           

vorrei visualizzare gli stessi dati però divisi x la data .
Come posso fare?

Offline E.Musso

  • Utente junior
  • **
  • Post: 82
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy GT-S5660
  • Play Store ID:
    Emiliano Musso
  • Sistema operativo:
    Windows 7
Re:Suddivisione per data
« Risposta #1 il: 28 Dicembre 2011, 19:16:49 CET »
0
Ciao,
Ti è sufficiente un'ordinamento per data (ascendente o discendente), oppure hai bisogno di generare dei livelli di rottura?
Bollettazione Interventi - Un taglio ai costi di tipografia per professionisti!
--
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato

Offline deideidei

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Ubuntu 11.04
Re:Suddivisione per data
« Risposta #2 il: 30 Dicembre 2011, 10:48:15 CET »
0
emm ... ???
credevo un'ordinamento, ma visto che ci sei puoi dirmi tutti e due i metodi, così imparo cose nuove ?  :D

Offline deideidei

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Ubuntu 11.04
Re:Suddivisione per data
« Risposta #3 il: 30 Dicembre 2011, 10:51:49 CET »
0
e cm mi servirebbe visualizzare la data e sotto la lista di entrate e uscite per quella data, e così x tutte le date in cui ci sono entrate e uscite
 

Offline E.Musso

  • Utente junior
  • **
  • Post: 82
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy GT-S5660
  • Play Store ID:
    Emiliano Musso
  • Sistema operativo:
    Windows 7
Re:Suddivisione per data
« Risposta #4 il: 30 Dicembre 2011, 11:53:03 CET »
0
Beh, te l'ho chiesto principalmente per capire se mettermi le mani nei capelli oppure no: che io sappia, fare una rottura grafica per un dato campo presuppone un override abbastanza massiccio della listview...e così su due piedi non saprei darti indicazioni.  :-(

Per quanto invece riguarda l'ordinamento dei dati, è sufficiente agire sulle query: supponendo di avere un campo data di nome "mia_data", una query potrebbe essere:
Codice (Java): [Seleziona]
SELECT * FROM mia_tabella WHERE <condizioni> ORDER BY mia_data ASC;
se ordiniamo per data ascendente, oppure

Codice (Java): [Seleziona]
SELECT * FROM mia_tabella WHERE <condizioni> ORDER BY mia_data ASC;
se ordiniamo per data discendente.
Potrebbero esserti inoltre utili le info che trovi su questa pagina http://www.sqlite.org/lang_datefunc.html
Bollettazione Interventi - Un taglio ai costi di tipografia per professionisti!
--
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato

Offline deideidei

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Ubuntu 11.04
Re:Suddivisione per data
« Risposta #5 il: 30 Dicembre 2011, 11:59:05 CET »
0
grazie a queste query posso ordinare i dati e poi visualizzarli con un SimpleCursorAdapter come facevo, ma avrei una lista come quella di prima solo ordinata, io invece vorrei visualizzare i dati in gruppi per data con la data visibile e sotto di essa visualizzare la lista di dati riferiti a quella data

Offline E.Musso

  • Utente junior
  • **
  • Post: 82
  • Respect: +17
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy GT-S5660
  • Play Store ID:
    Emiliano Musso
  • Sistema operativo:
    Windows 7
Re:Suddivisione per data
« Risposta #6 il: 30 Dicembre 2011, 19:11:17 CET »
0
Personalmente non ho ancora affrontato questa problematica, ad ogni modo ho trovato un articolo che fa al caso tuo.

Eccolo: http://blogingtutorials.blogspot.com/2010/11/android-listview-header-two-or-more-in.html
Spero ti sia utile   :-)
Bollettazione Interventi - Un taglio ai costi di tipografia per professionisti!
--
È stata trovata una soluzione al tuo problema?Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato

Offline deideidei

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Ubuntu 11.04
Re:Suddivisione per data
« Risposta #7 il: 30 Dicembre 2011, 20:19:29 CET »
0
grazie per il link, me lo sto leggendo, però prima provando a fare un ordinamento tramite data ho visto che non mi ordina niente, quindi ho fatto in modo di caricare la data nel formato YYYY-MM-DD ma niente, come faccio?

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Suddivisione per data
« Risposta #8 il: 30 Dicembre 2011, 20:39:58 CET »
0
grazie per il link, me lo sto leggendo, però prima provando a fare un ordinamento tramite data ho visto che non mi ordina niente, quindi ho fatto in modo di caricare la data nel formato YYYY-MM-DD ma niente, come faccio?
Secondo me avresti fatto meglio a usare il numero di millisecondi come data e non una stringa, cosí da potere ordinare facilmente.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline deideidei

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Ubuntu 11.04
Re:Suddivisione per data
« Risposta #9 il: 30 Dicembre 2011, 20:47:18 CET »
0
ovvero?

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Suddivisione per data
« Risposta #10 il: 30 Dicembre 2011, 20:54:21 CET »
0
In che senso? Memorizzi la data in millisecondi e naturalmente una data più recente avrà un valore in millisecondi più alto.
Quando poi ti serve la recuperi e la converti in anno, mese, giorno, ora, minuto e secondo. Ovviamente ti fermi all'approssimazione che ti serve.
ti parlo di millisecondi perché la data attuale in millisecondi la ottieni direttamente usando la System.getCurrentTimeMillis

Se ti interessano solamente giorno, mese e anno puoi benissimo convertirla in giorni e salvarla sempre come numero.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline deideidei

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Ubuntu 11.04
Re:Suddivisione per data
« Risposta #11 il: 30 Dicembre 2011, 21:04:57 CET »
0
ma io ho una stringa per es. 2011-12-25 che salso così com'è nel database, come e dove devo convertirla, nella classe dell'immissione della data o nella classe del database?

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Suddivisione per data
« Risposta #12 il: 30 Dicembre 2011, 21:47:06 CET »
0
Puoi anche nella classe del database. Fai un metodo che accetta la stringa, la parsa, la converte e la aggiunge al database
Postate il LogCat LogCat LogCat LogCat LogCat

Offline deideidei

  • Utente junior
  • **
  • Post: 110
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S
  • Sistema operativo:
    Ubuntu 11.04
Re:Suddivisione per data
« Risposta #13 il: 31 Dicembre 2011, 12:10:08 CET »
0
mi sa che mi sto perdendo in un bicchier d'acqua, ma non ci riesco, in prativa tramite una datepiker setto un text e poi converto e salvo nel database, così :
Codice (Java): [Seleziona]
TextView data = (TextView)findViewById(R.id.dateDisplay);
                        String data1 = data.getText().toString();
                       
ovviamente data1 salvo nel database che ha questo formato es. 2011-12-31, come faccio a convertire direttamente qui e poi salvare un stringa con soli giorni o millisecondi come dicevi?
ho provato a trasformare la string in int ma poi non riesco a ritrasformarla in string per salvarla nel DB.
Puoi darmi qualche esempio pratico ?

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Suddivisione per data
« Risposta #14 il: 31 Dicembre 2011, 12:58:59 CET »
0
Non puoi trasformare direttamente quella stringa in int.
Dal DatePicker puoi ottenere direttamente gli int corrispondenti a giorno, mese e anno. Quindi fai la conversione in giorni e salvi nel database.
Postate il LogCat LogCat LogCat LogCat LogCat