Aggiungere select sum

di il
80 risposte

Aggiungere select sum

Ciao, sono alle prese con la mia prima app e mi trovo fermo nel conteggiare un totale di cifre provenienti da un Database, forse per voi sara banale ma per me è insormontabile, malgrado le ore perse alla ricerca di una spiegazione capibile per me,novellino in programmazione.
Nello specifico, ho questa classe:
import java.util.ArrayList;

import turni.db.tab.R;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
import android.widget.Toast;

public class Gennaio extends Activity {

        private DbHelper mHelper;
        private SQLiteDatabase dataBase;

        private ArrayList<String> turno_id = new ArrayList<String>();
        private ArrayList<String> turno_mEse = new ArrayList<String>();
        private ArrayList<String> turno_gIorno = new ArrayList<String>();
        private ArrayList<String> turno_tUrno = new ArrayList<String>();
        private ArrayList<String> turno_oRe = new ArrayList<String>();
        private ArrayList<String> turno_totoRe = new ArrayList<String>();
        

        private ListView userList;
        private AlertDialog.Builder build;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.row2);

                userList = (ListView) findViewById(R.id.List);

                mHelper = new DbHelper(this);
                
                //Aggiunta nuovi record
                findViewById(R.id.btnAdd).setOnClickListener(new OnClickListener() {

                        public void onClick(View v) {

                                Intent i = new Intent(getApplicationContext(),
                                                AddActivity.class);
                                i.putExtra("Aggiorna", false);
                                startActivity(i);

                        }
                });
                
                //Aggiornamento dati
                userList.setOnItemClickListener(new OnItemClickListener() {

                        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                                        long arg3) {

                                Intent i = new Intent(getApplicationContext(),
                                                AddActivity.class);

                                i.putExtra("TurnoID", turno_id.get(arg2));
                                i.putExtra("Mese", turno_mEse.get(arg2));
                                i.putExtra("Giorno", turno_gIorno.get(arg2));
                                i.putExtra("Turno", turno_tUrno.get(arg2));
                                i.putExtra("Ore", turno_oRe.get(arg2));
                                i.putExtra("Ore", turno_totoRe.get(arg2));
                                i.putExtra("update", true);
                                startActivity(i);

                        }
                });
                
                //Click lungo per cancellare
                userList.setOnItemLongClickListener(new OnItemLongClickListener() {

                        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                                        final int arg2, long arg3) {

                                build = new AlertDialog.Builder(Gennaio.this);
                                build.setTitle("Cancella " +turno_mEse.get(arg2) +turno_gIorno.get(arg2) +turno_tUrno.get(arg2) + " " +turno_oRe.get(arg2));
                                build.setMessage("Vuoi cancellare ?");
                                build.setPositiveButton("Si",
                                                new DialogInterface.OnClickListener() {

                                                        @SuppressLint("ShowToast")
                                                        public void onClick(DialogInterface dialog,
                                                                        int which) {

                                                                Toast.makeText(
                                                                                getApplicationContext(),
                                                                                turno_mEse.get(arg2) +turno_gIorno.get(arg2) +turno_tUrno.get(arg2) + " " +turno_oRe.get(arg2) +" è stato cancellato", 3000).show();

                                                                dataBase.delete(
                                                                                DbHelper.TURNI_TABLE,
                                                                                DbHelper.TURNO_ID + "="
                                                                                                + turno_id.get(arg2), null);
                                                                displayTurni();
                                                                dialog.cancel();
                                                        }
                                                });

                                build.setNegativeButton("No",
                                                new DialogInterface.OnClickListener() {

                                                        public void onClick(DialogInterface dialog,
                                                                        int which) {
                                                                dialog.cancel();
                                                        }
                                                });
                                AlertDialog alert = build.create();
                                alert.show();

                                return true;
                        }
                });
        }

        @Override
        protected void onResume() {
                displayTurni();
                super.onResume();
        }

        /**
         * Visualizza dati da SQLite
         */
        private void displayTurni() {
                dataBase = mHelper.getWritableDatabase();
                Cursor mCursor = dataBase.rawQuery("SELECT TURNO_ID,MESE,GIORNO,TURNO,ORE FROM " + DbHelper.TURNI_TABLE+" WHERE MESE = 'Gennaio'", null);

                turno_id.clear();
                turno_mEse.clear();
                turno_gIorno.clear();
                turno_tUrno.clear();
                turno_oRe.clear();
                if (mCursor.moveToFirst()) {
                        do {
                                turno_id.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.TURNO_ID)));
                                turno_mEse.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.MESE)));
                                turno_gIorno.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.GIORNO)));
                                turno_tUrno.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.TURNO)));
                                turno_oRe.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.ORE)));
                                
                                

                        } while (mCursor.moveToNext());
                }
                

       {
                dataBase = mHelper.getWritableDatabase();
                Cursor cCursor = dataBase.rawQuery("SELECT SUM (ORE) FROM " + DbHelper.TURNI_TABLE+"", null);

                turno_totoRe.clear();
                if (cCursor.moveToFirst()) {
                        do {

                            turno_totoRe.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.ORE)));
                                
                                

                        } while (mCursor.moveToNext());
                }
                DisplayAdapter disadpt = new DisplayAdapter(Gennaio.this,turno_id, turno_mEse, turno_gIorno, turno_tUrno, turno_oRe, turno_totoRe );
                userList.setAdapter(disadpt);
                mCursor.close();
        }



Sto tentando di fare il totale della colonna Ore del database e visualizzarne il risultato al fondo della listview (già modificata) ed inserita la relativa textview Totale ore,
Quando avvio l'app, si blocca e dal log penso sia dovuto all'istruzione
Cursor cCursor = dataBase.rawQuery("SELECT SUM (ORE) FROM " + DbHelper.TURNI_TABLE+"", null);
,
in quanto nella mia ignoranza se capisco bene, reindirizzo il risultato di select sum alla visualizzzione delle ore e non alla textview relativa.
Il mio problma e:
Come si fa a far si che il risultato della select sum venga indirizzato al textview relativa???
E giusto il mio metodo di inserimento dell'istruzione? o posso aggiungere la funzione SELECT SUM
alla prima SELECT e se si come faccio.
Spero di essermi spiegato bene sul mio problema,Sono giorni che cerco soluzione, con tutorial, esempi e pezzi di classe recuperate qui e la ma senza riuscirci, sicuramente per qualcuno di voi e una fesseria. Grazie. Ciao

80 Risposte

  • Re: Aggiungere select sum

    Ciao, può darsi che il problema sia dovuto allo spazio fra la parola SUM e la parentesi! Dovrebbe essere SUM(...)
    Poi in realtà può darsi che ci siano altre cose, ma al momento prova con quella


    Sent from my iPhone using Tapatalk
  • Re: Aggiungere select sum

    Grazie intanto della risposta, ho provato, nessun cambiamento, l'app si blocca, se tolgo la funzione select sum tutto funziona a meraviglia, è giusta la sintassi con cui la ho inserita?
    Non c'è modo di accodarla al primo select?
  • Re: Aggiungere select sum

    La sum non puoi farla insieme alla prima select perché mischieresti una funzione aggregata con campi normali senza usare la group by. Quindi è meglio tenerle separate..
    Per il resto la sintassi è corretta. Il LogCat cosa dice relativamente all'errore?


    Sent from my iPhone using Tapatalk
  • Re: Aggiungere select sum

    Questo è il log:

    [02-14 17:38:44.838: I/dalvikvm(13653): threadid=3: reacting to signal 3
    02-14 17:38:45.249: E/dalvikvm(13653): Unable to open stack trace file '/data/anr/traces.txt': Is a directory
    02-14 17:38:45.348: I/dalvikvm(13653): threadid=3: reacting to signal 3
    02-14 17:38:45.493: I/dalvikvm(13653): Wrote stack traces to '/data/anr/traces.txt'
    02-14 17:38:45.859: I/dalvikvm(13653): threadid=3: reacting to signal 3
    02-14 17:38:45.908: I/dalvikvm(13653): Wrote stack traces to '/data/anr/traces.txt'
    02-14 17:38:46.258: D/AndroidRuntime(13653): Shutting down VM
    02-14 17:38:46.258: W/dalvikvm(13653): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
    02-14 17:38:46.318: E/AndroidRuntime(13653): FATAL EXCEPTION: main
    02-14 17:38:46.318: E/AndroidRuntime(13653): java.lang.RuntimeException: Unable to resume activity {turni.db.tab/com.turniDB.Main}: java.lang.RuntimeException: Unable to resume activity {turni.db.tab/com.turniDB.Gennaio}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2444)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2472)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1986)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.app.ActivityThread.access$600(ActivityThread.java:123)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.os.Handler.dispatchMessage(Handler.java:99)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.os.Looper.loop(Looper.java:137)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.app.ActivityThread.main(ActivityThread.java:4424)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at java.lang.reflect.Method.invokeNative(Native Method)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at java.lang.reflect.Method.invoke(Method.java:511)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at dalvik.system.NativeStart.main(Native Method)
    02-14 17:38:46.318: E/AndroidRuntime(13653): Caused by: java.lang.RuntimeException: Unable to resume activity {turni.db.tab/com.turniDB.Gennaio}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2444)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:178)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.app.LocalActivityManager.dispatchResume(LocalActivityManager.java:523)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.app.ActivityGroup.onResume(ActivityGroup.java:61)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1154)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.app.Activity.performResume(Activity.java:4539)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2434)
    02-14 17:38:46.318: E/AndroidRuntime(13653): ... 12 more
    02-14 17:38:46.318: E/AndroidRuntime(13653): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:400)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at com.turniDB.Gennaio.displayTurni(Gennaio.java:167)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at com.turniDB.Gennaio.onResume(Gennaio.java:129)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1154)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.app.Activity.performResume(Activity.java:4539)
    02-14 17:38:46.318: E/AndroidRuntime(13653): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2434)
    02-14 17:38:46.318: E/AndroidRuntime(13653): ... 18 more
    02-14 17:38:46.368: I/dalvikvm(13653): threadid=3: reacting to signal 3
    02-14 17:38:46.448: I/dalvikvm(13653): Wrote stack traces to '/data/anr/traces.txt'
    02-14 17:38:46.868: I/dalvikvm(13653): threadid=3: reacting to signal 3
    02-14 17:38:46.890: I/dalvikvm(13653): Wrote stack traces to '/data/anr/traces.txt'
    02-14 17:38:47.089: I/dalvikvm(13653): threadid=3: reacting to signal 3
    02-14 17:38:47.108: I/dalvikvm(13653): Wrote stack traces to '/data/anr/traces.txt'
    ]
    Onestamente ci capisco poco, ma se non erro, alla linea 167 si aspetta qualcosa di diverso e si blocca.
    PS ma al SELECT SUM e giusto riportare :
    turno_totoRe.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.ORE)));
    ??
  • Re: Aggiungere select sum

    In realtà credo che l'errore sia dovuto a queste righe:
    
     if (cCursor.moveToFirst()) {
                            do {
    
                                turno_totoRe.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.ORE)));
                                    
                                    
    
                            } while (mCursor.moveToNext());
    
    in particolare l'mCursor dovrebbe essere arrivato alla fine nel momento in cui tu fai quella chiamata (a causa del while precedente).

    Comunque una notazione che trovo più comoda (e leggibile) per l'utilizzo dei cursor invece della coppia if / do-while è la seguente:
    
    while (cursor.moveToNext()) {
        ....
    }
    
  • Re: Aggiungere select sum

    Può essere che sul display adapter ci sia qualche errore???
    Se non disturbo è ne hai voglia ti posso mandare lo zip con il sorgente.
    Magri riesci a capire meglio dove l'errore?
  • Re: Aggiungere select sum

    No l'errore è alla riga 167, che è quella che hai riportato in precedenza immagino.
    Un errore sicuramente lo commetti quando vai a prendere il risultato della query: innanzitutto "select sum(..)" restituisce un int (o comunque un valore coerente con quello definito nel database, ad esempio float se prevedi ore non intere). Inoltre sai già che il risultato in questione occupa la prima colonna (in quanto nella select la sum occupa la prima posizione).

    Per cui dovresti fare
    
    turno_totoRe.add(mCursor.getInt(0)+"");
    
  • Re: Aggiungere select sum

    Niente, non capisco, dal log ho sempre lo stesso erore alla linea 167, anche con il tuo suggerimento,
    questo e il log:[02-14 20:12:52.918: E/dalvikvm(7779): Unable to open stack trace file '/data/anr/traces.txt': Is a directory
    02-14 20:12:53.098: I/dalvikvm(7779): threadid=3: reacting to signal 3
    02-14 20:12:53.128: I/dalvikvm(7779): Wrote stack traces to '/data/anr/traces.txt'
    02-14 20:12:53.578: D/AndroidRuntime(7779): Shutting down VM
    02-14 20:12:53.578: W/dalvikvm(7779): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
    02-14 20:12:53.598: I/dalvikvm(7779): threadid=3: reacting to signal 3
    02-14 20:12:53.648: E/AndroidRuntime(7779): FATAL EXCEPTION: main
    02-14 20:12:53.648: E/AndroidRuntime(7779): java.lang.RuntimeException: Unable to resume activity {turni.db.tab/com.turniDB.Main}: java.lang.RuntimeException: Unable to resume activity {turni.db.tab/com.turniDB.Gennaio}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2444)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2472)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1986)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.app.ActivityThread.access$600(ActivityThread.java:123)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.os.Handler.dispatchMessage(Handler.java:99)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.os.Looper.loop(Looper.java:137)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.app.ActivityThread.main(ActivityThread.java:4424)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at java.lang.reflect.Method.invokeNative(Native Method)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at java.lang.reflect.Method.invoke(Method.java:511)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at dalvik.system.NativeStart.main(Native Method)
    02-14 20:12:53.648: E/AndroidRuntime(7779): Caused by: java.lang.RuntimeException: Unable to resume activity {turni.db.tab/com.turniDB.Gennaio}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2444)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:178)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.app.LocalActivityManager.dispatchResume(LocalActivityManager.java:523)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.app.ActivityGroup.onResume(ActivityGroup.java:61)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1154)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.app.Activity.performResume(Activity.java:4539)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2434)
    02-14 20:12:53.648: E/AndroidRuntime(7779): ... 12 more
    02-14 20:12:53.648: E/AndroidRuntime(7779): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:400)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:68)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at com.turniDB.Gennaio.displayTurni(Gennaio.java:167)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at com.turniDB.Gennaio.onResume(Gennaio.java:129)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1154)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.app.Activity.performResume(Activity.java:4539)
    02-14 20:12:53.648: E/AndroidRuntime(7779): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2434)
    02-14 20:12:53.648: E/AndroidRuntime(7779): ... 18 more
    02-14 20:12:53.679: I/dalvikvm(7779): Wrote stack traces to '/data/anr/traces.txt'
    02-14 20:12:54.142: I/dalvikvm(7779): threadid=3: reacting to signal 3
    02-14 20:12:54.188: I/dalvikvm(7779): Wrote stack traces to '/data/anr/traces.txt'
    02-14 20:12:54.288: I/dalvikvm(7779): threadid=3: reacting to signal 3
    02-14 20:12:54.328: I/dalvikvm(7779): Wrote stack traces to '/data/anr/traces.txt'
    ]

    e questa e la classe modificata come da te suggerito:
    dataBase = mHelper.getWritableDatabase();
                    Cursor cCursor = dataBase.rawQuery("SELECT SUM(ORE) FROM " + DbHelper.TURNI_TABLE+"", null);
    
                    turno_totoRe.clear();
                    if (cCursor.moveToFirst()) {
                            do {
    
                            	turno_totoRe.add(mCursor.getInt(0)+"");
                                    
                                    
    
                            } while (mCursor.moveToNext());
                    }
                    DisplayAdapter disadpt = new DisplayAdapter(Gennaio.this,turno_id, turno_mEse, turno_gIorno, turno_tUrno, turno_oRe, turno_totoRe );
                    userList.setAdapter(disadpt);
                    mCursor.close();
            }
    
    
    }}
    Ho rincontrollato il display adpter ma non ho individuato errori, non so proprio dove cercare...

    e questo è l'adapter se puo esserti utile come riferimento
    package com.turniDB;
    
    import java.util.ArrayList;
    
    import turni.db.tab.R;
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.TextView;
    
    public class DisplayAdapter extends BaseAdapter {
            private Context mContext;
            
            private ArrayList<String> id;
            private ArrayList<String> mese;
            private ArrayList<String> giorno;
            private ArrayList<String> turno;
            private ArrayList<String> ore;
            private ArrayList<String> totore;
    
    
            
    
            public DisplayAdapter(Context c, ArrayList<String> id,ArrayList<String> mese, ArrayList<String> giorno, ArrayList<String> turno, ArrayList<String> ore,ArrayList<String> totore) {
                    this.mContext = c;
    
                    this.id = id;
                    this.mese = mese;
                    this.giorno = giorno;
                    this.turno = turno;
                    this.ore = ore;
                    this.ore = totore;
    
            }
    
            public DisplayAdapter(Gennaio c, 
            		        ArrayList<String> turno_id,
                            ArrayList<String> turno_mEse, 
                            ArrayList<String> turno_gIorno,
                            ArrayList<String> turno_tUrno, 
                            ArrayList<String> turno_oRe,
                            ArrayList<String> turno_totoRe) {
                    // TODO Auto-generated constructor stub
            }
    
            public int getCount() {
                    // TODO Auto-generated method stub
                    return id.size();
            }
    
            public Object getItem(int position) {
                    // TODO Auto-generated method stub
                    return null;
            }
    
            public long getItemId(int position) {
                    // TODO Auto-generated method stub
                    return 0;
            }
    
            public View getView(int pos, View child, ViewGroup parent) {
                    Holder mHolder;
                    LayoutInflater layoutInflater;
                    if (child == null) {
                            layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                            child = layoutInflater.inflate(R.layout.main2, null);
                            mHolder = new Holder();
                            mHolder.txt_id = (TextView) child.findViewById(R.id.txt_id);
                            mHolder.txt_mEse = (TextView) child.findViewById(R.id.txt_mEse);
                            mHolder.txt_gIorno = (TextView) child.findViewById(R.id.txt_gIorno);
                            mHolder.txt_tUrno = (TextView) child.findViewById(R.id.txt_tUrno);
                            mHolder.txt_oRe = (TextView) child.findViewById(R.id.txt_oRe);
                            mHolder.txt_totoRe = (TextView) child.findViewById(R.id.texttotore);
                            child.setTag(mHolder);
                    } else {
                            mHolder = (Holder) child.getTag();
                    }
                    mHolder.txt_id.setText(id.get(pos));
                    mHolder.txt_mEse.setText(mese.get(pos));
                    mHolder.txt_gIorno.setText(giorno.get(pos));
                    mHolder.txt_tUrno.setText(turno.get(pos));
                    mHolder.txt_oRe.setText(ore.get(pos));
                    mHolder.txt_totoRe.setText(totore.get(pos));
    
                    return child;
            }
    
            public class Holder {
                    TextView txt_id;
                    TextView txt_mEse;
                    TextView txt_gIorno;
                    TextView txt_tUrno;
                    TextView txt_oRe;
                    TextView txt_totoRe;
            }
    
    }
    Abbi pazienza ma sono due mesi che sono dietro ad apprendere e fermarmi adesso mi gira veramente l'anima. Grazie ancora.
  • Re: Aggiungere select sum

    In queste righe
    
     if (cCursor.moveToFirst()) {
                            do {
    
                               turno_totoRe.add(mCursor.getInt(0)+"");
                                    
                                    
    
                            } while (mCursor.moveToNext());
                    }
    
    utilizzi sia il "cCursor" che "mCursor", quando il risultato dell'ultima query (quella con la SUM) è gestito solamente dal cCursor. Di conseguenza quello che dovresti fare è
    
    while (cCursor.moveToNext()) {
        turno_totoRe.add(cCursor.getInt(0)+"");
    }
    
  • Re: Aggiungere select sum

    Ciao, grazie per la risposta, nel frattempo ho risolto,
    finalmente dal log vedo la somma delle ore, ma adesso per riportarla in textview come posso fare? attualmente stampo la somma nel log corettamente ma sono fermo a questo punto:
    
    			Cursor cursor = dataBase.rawQuery(
    					"SELECT SUM(ore) AS somma FROM "+DbHelper.TURNI_TABLE,
    					new String[0]);
    					int colIndex = cursor.getColumnIndex("somma");
    					if (colIndex == -1)
    					return null;
    					else
    				    cursor.moveToFirst();
    					somma = cursor.getInt(colIndex);				
    					System.out.println("La somma è "+somma);
    					Integer.toString(somma);
    					
    			} while (mCursor.moveToNext());
    		}
    		DisplayAdapter disadpt = new DisplayAdapter(Gennaio.this,turno_id, turno_mEse, turno_gIorno, turno_tUrno, turno_oRe, turno_gIorno );
    		userList.setAdapter(disadpt);
    		mCursor.close();
    		return disadpt;
    	}
    
    	
    
    }
    
    
    se il metodo è estto, dopo la stampa a log o trasformato l'int in string, adesso vorrei stampare il risultato in text view totore mi puoi dare una ulteriore mano? Grazie.
  • Re: Aggiungere select sum

    A parte l'errore nel DisplayAdapter:
    this.ore = totore;
    Quello che dovresti fare è invocare il metodo "notifyDataSetChanged" sull'adapter, in modo da informarlo del cambiamento dei dati e permettergli di aggiornare la view
  • Re: Aggiungere select sum

    Se intendi il doppio turno_gIorno me ne sono accorto ma non capisco perchè se lo elimino mi da errore, riguardo il metodo di trasferire l stringa totore alla textview abbi pazienza ma se mi dai la sintassi completa mi fai un grosso favore
  • Re: Aggiungere select sum

    Riguardo la prima cosa intendevo che nel costruttore del DisplayAdapter c'è un errore:
    public DisplayAdapter(Context c, ArrayList<String> id,ArrayList<String> mese, ArrayList<String> giorno, ArrayList<String> turno, ArrayList<String> ore,ArrayList<String> totore) {
                    this.mContext = c;
    
                    this.id = id;
                    this.mese = mese;
                    this.giorno = giorno;
                    this.turno = turno;
                    this.ore = ore;
                    this.ore = totore;
    
            }
    
    dovrebbe essere:
    public DisplayAdapter(Context c, ArrayList<String> id,ArrayList<String> mese, ArrayList<String> giorno, ArrayList<String> turno, ArrayList<String> ore,ArrayList<String> totore) {
                    this.mContext = c;
    
                    this.id = id;
                    this.mese = mese;
                    this.giorno = giorno;
                    this.turno = turno;
                    this.ore = ore;
                    this.totore = totore;
    
            }
    
    riguardo all'aggiornamento dei dati, dopo aver fatto la correzione che ti ho indicato qua sopra, in teoria dovrebbe già far vedere i dati desiderati, perché nell'Adapter il metodo getView dovrebbe già essere implementato correttamente
  • Re: Aggiungere select sum

    Hai ragione, ma avevo già corretto quell'errore, ma continuo a non avere il risultato in textview attualmente ho queste classi
    package com.turniDB;
    
    
    import java.util.ArrayList;
    
    import turni.db.tab.R;
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.AdapterView.OnItemLongClickListener;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class Gennaio extends Activity {
    
    	private static final String mese = null;
    	private DbHelper mHelper;
    	private SQLiteDatabase dataBase;
    
    	private ArrayList<String> turno_id = new ArrayList<String>();
    	private ArrayList<String> turno_mEse = new ArrayList<String>();
    	private ArrayList<String> turno_gIorno = new ArrayList<String>();
    	private ArrayList<String> turno_tUrno = new ArrayList<String>();
    	private ArrayList<String> turno_oRe = new ArrayList<String>();
    	
    
    	private ListView userList;
    	private AlertDialog.Builder build;
    	private int totore;
    
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.row2);
    
    		userList = (ListView) findViewById(R.id.List);
    
    		mHelper = new DbHelper(this);
    		
    		//Aggiunta nuovi record
    		findViewById(R.id.btnAdd).setOnClickListener(new OnClickListener() {
    
    			public void onClick(View v) {
    
    				Intent i = new Intent(getApplicationContext(),
    						AddActivity.class);
    				i.putExtra("Aggiorna", false);
    				startActivity(i);
    
    			}
    		});
    		
    		//Aggiornamento dati
    		userList.setOnItemClickListener(new OnItemClickListener() {
    
    			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    					long arg3) {
    
    				Intent i = new Intent(getApplicationContext(),
    						AddActivity.class);
    
    				i.putExtra("TurnoID", turno_id.get(arg2));
    				i.putExtra("Mese", turno_mEse.get(arg2));
    				i.putExtra("Giorno", turno_gIorno.get(arg2));
    				i.putExtra("Turno", turno_tUrno.get(arg2));
    				i.putExtra("Ore", turno_oRe.get(arg2));
    				i.putExtra("update", true);
    				startActivity(i);
    
    			}
    		});
    		
    		//Click lungo per cancellare
    		userList.setOnItemLongClickListener(new OnItemLongClickListener() {
    
    			public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
    					final int arg2, long arg3) {
    
    				build = new AlertDialog.Builder(Gennaio.this);
    				build.setTitle("Cancella " +turno_mEse.get(arg2) +turno_gIorno.get(arg2) +turno_tUrno.get(arg2) + " " +turno_oRe.get(arg2));
    				build.setMessage("Vuoi cancellare ?");
    				build.setPositiveButton("Si",
    						new DialogInterface.OnClickListener() {
    
    							@SuppressLint("ShowToast")
    							public void onClick(DialogInterface dialog,
    									int which) {
    
    								Toast.makeText(
    										getApplicationContext(),
    										turno_mEse.get(arg2) +turno_gIorno.get(arg2) +turno_tUrno.get(arg2) + " " +turno_oRe.get(arg2) +" è stato cancellato", 3000).show();
    
    								dataBase.delete(
    										DbHelper.TURNI_TABLE,
    										DbHelper.TURNO_ID + "="
    												+ turno_id.get(arg2), null);
    								displayTurni();
    								dialog.cancel();
    							}
    						});
    
    				build.setNegativeButton("No",
    						new DialogInterface.OnClickListener() {
    
    							public void onClick(DialogInterface dialog,
    									int which) {
    								dialog.cancel();
    							}
    						});
    				AlertDialog alert = build.create();
    				alert.show();
    
    				return true;
    			}
    		});
    	}
    
    	@Override
    	protected void onResume() {
    		displayTurni();
    		super.onResume();
    	}
    
    	/**
    	 * Visualizza dati da SQLite
    	 * @return 
    	 */
    	private Object displayTurni() {
    		dataBase = mHelper.getWritableDatabase();
    		Cursor mCursor = dataBase.rawQuery("SELECT * FROM " + DbHelper.TURNI_TABLE+" WHERE MESE = 'Gennaio'", null);
    
    		turno_id.clear();
    		turno_mEse.clear();
    		turno_gIorno.clear();
    		turno_tUrno.clear();
    		turno_oRe.clear();
    		if (mCursor.moveToFirst()) {
    			do {
    				turno_id.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.TURNO_ID)));
    				turno_mEse.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.MESE)));
    				turno_gIorno.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.GIORNO)));
    				turno_tUrno.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.TURNO)));
    				turno_oRe.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.ORE)));
    				
    				
    
    			
    			Cursor cursor = dataBase.rawQuery(
    					"SELECT SUM(ore) AS totore FROM "+DbHelper.TURNI_TABLE,
    					new String[0]);
    					int colIndex = cursor.getColumnIndex("totore");
    					if (colIndex == -1)
    					return null;
    					else
    				    cursor.moveToFirst();
    					totore = cursor.getInt(colIndex);				
    					System.out.println("Il totale  è "+totore);
    					Integer.toString(totore);
    
    					
    			} while (mCursor.moveToNext());
    		}
    		DisplayAdapter disadpt = new DisplayAdapter(Gennaio.this,turno_id, turno_mEse, turno_gIorno, turno_tUrno, turno_oRe, turno_gIorno );
    		userList.setAdapter(disadpt);
    		mCursor.close();
    		return disadpt;
    	}
    
    	
    
    }
    
    
    

    e il display adapter:

    import java.util.ArrayList;
    
    import turni.db.tab.R;
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.TextView;
    
    public class DisplayAdapter extends BaseAdapter {
    	private Context mContext;
    	private ArrayList<String> id;
    	private ArrayList<String> mese;
    	private ArrayList<String> giorno;
    	private ArrayList<String> turno;
    	private ArrayList<String> ore;
    	private ArrayList<String> totore;
    
    
    	
    
    	public DisplayAdapter(Context c, ArrayList<String> id,ArrayList<String> mese, ArrayList<String> giorno, ArrayList<String> turno, ArrayList<String> ore,ArrayList<String> totore) {
            this.mContext = c;
    
            this.id = id;
            this.mese = mese;
            this.giorno = giorno;
            this.turno = turno;
            this.ore = ore;
            this.totore = totore;
    
    }
    
    	public int getCount() {
    		// TODO Auto-generated method stub
    		return id.size();
    	}
    
    	public Object getItem(int position) {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
    	public long getItemId(int position) {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    
    	public View getView(int pos, View child, ViewGroup parent) {
    		Holder mHolder;
    		LayoutInflater layoutInflater;
    		if (child == null) {
    			layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    			child = layoutInflater.inflate(R.layout.main2, null);
    			mHolder = new Holder();
    			mHolder.txt_id = (TextView) child.findViewById(R.id.txt_id);
    			mHolder.txt_mEse = (TextView) child.findViewById(R.id.txt_mEse);
    			mHolder.txt_gIorno = (TextView) child.findViewById(R.id.txt_gIorno);
    			mHolder.txt_tUrno = (TextView) child.findViewById(R.id.txt_tUrno);
    			mHolder.txt_oRe = (TextView) child.findViewById(R.id.txt_oRe);
    			mHolder.txt_totoRe = (TextView) child.findViewById(R.id.texttotore);
    			child.setTag(mHolder);
    		} else {
    			mHolder = (Holder) child.getTag();
    		}
    		mHolder.txt_id.setText(id.get(pos));
    		mHolder.txt_mEse.setText(mese.get(pos));
    		mHolder.txt_gIorno.setText(giorno.get(pos));
    		mHolder.txt_tUrno.setText(turno.get(pos));
    		mHolder.txt_oRe.setText(ore.get(pos));
    		mHolder.txt_totoRe.setText(totore.get(pos));
    
    		return child;
    	}
    
    	public class Holder {
    		TextView txt_id;
    		TextView txt_mEse;
    		TextView txt_gIorno;
    		TextView txt_tUrno;
    		TextView txt_oRe;
    		TextView txt_totoRe;
    	}
    
    
    Ma la somma ore non riesco a farl arrivare alla textview
Devi accedere o registrarti per scrivere nel forum
80 risposte