Autore Topic: Non riesco a visualizzare su una ListView i risultati di una query da sqLite  (Letto 789 volte)

Offline n3tmaster

  • Utente junior
  • **
  • Post: 96
  • Respect: 0
    • Google+
    • lerocchi
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4 - Nexus 7 - PadFone JB
  • Sistema operativo:
    Mac OSX 10.7
Salve ragazzi, ho un piccolo problema ... molto strano tra l'altro perché solitamente non ho problemi nella gestione dei risultati di una query da sqlite; ma a questo giro ho un problema:

Ho un activity che deve mostrare i risultati di una query da sqlite ecco come ho tentato di implementare la cosa

Qui di seguito vi è il codice del file xml che gestisce il singolo record

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >

    <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content" >
                 <TextView
                   android:id="@+id/reportID"
                   android:layout_width="1dp"
                   android:layout_height="1dp"
                   
                   android:textAppearance="?android:attr/textAppearanceMedium" />
        <ImageView
           android:id="@+id/reportFoto"
           android:layout_width="wrap_content"
           android:layout_height="match_parent"
           
           android:src="@android:drawable/ic_menu_camera" />

        <LinearLayout
           android:layout_width="match_parent"
           android:layout_height="70dp"
           android:orientation="vertical" >

            <LinearLayout
               android:layout_width="match_parent"
               android:layout_height="wrap_content" >

                <TextView
                   android:id="@+id/reportUtente"
                   android:layout_width="137dp"
                   android:layout_height="wrap_content"
                   
                   android:textAppearance="?android:attr/textAppearanceMedium" />

                <TextView
                   android:id="@+id/reportSpesa"
                   android:layout_width="match_parent"
                   android:layout_height="wrap_content"
                 
                   android:textAppearance="?android:attr/textAppearanceMedium" />

            </LinearLayout>

            <TextView
               android:id="@+id/reportDescrizione"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="Small Text"
               android:textAppearance="?android:attr/textAppearanceSmall" />

            <TextView
               android:id="@+id/reportData"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="Small Text"
               android:textAppearance="?android:attr/textAppearanceSmall" />

        </LinearLayout>

    </LinearLayout>
   
</LinearLayout>

mentre qui di seguito riporto il file xml del layout che conterrà l'intera tabella:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >

 
    <ListView
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/list_report"
       android:layout_width="match_parent"
       android:layout_height="413dp"
       android:layout_weight="0.50" >
    </ListView>
 
</LinearLayout>

bene..la mia query è una join tra due tabelle:

Codice (Java): [Seleziona]
select s._id as _id ,v.nome as nome, s.data as data, s.spesa as spesa, s.descrizione as descrizione
from spese s, viaggiatori v
where s._id_viaggiatore=v._id and   s._id_valuta=1 and   s._id_viaggio=?

come potete notare è una join tra due tabelle (viaggiatori e spese) e l'unica clausula where è la id_viaggio.

mi sono creato a questo punto due classi per la gestione dei metadati delle tabelle:
Codice (Java): [Seleziona]
         public static class ViaggiatoriMetaData {

               
 
                //Viaggiatori
                public static String NOME = "nome";
                public static String ID_VIAGGIATORE = "_id";
               
                public static String TBL_VIAGGIATORI = "VIAGGIATORI";
               
                public static String[] LISTVIEW_COLUMNS = new String[] {  NOME };
                public static String[] VIAGGIATORI_COLUMNS = new String[] { ID_VIAGGIATORE, NOME };
               
        }

                public static class SpeseMetaData {

               
                //Tipi esercizio
                public static String DATA = "data";
                public static String SPESA = "spesa";
                public static String DESCRIZIONE = "descrizione";
                public static String FOTO = "foto";
               
                public static String ID_SPESA = "_id";
                public static String ID_VIAGGIO = "_id_viaggio";
                public static String ID_VIAGGIATORE = "_id_viaggiatore";
                public static String ID_VALUTA = "_id_valuta";
                public static String TBL_SPESE = "SPESE";
               
                public static String SUM_SPESA = "sum(spesa)";
               
               
        //      public static String[] SPINNER_COLUMNS = new String[] {  NOME };
                public static String[] SPESE_COLUMNS = new String[] { ID_SPESA, ID_VIAGGIO, ID_VIAGGIATORE,
                                                                                                                        ID_VALUTA,SPESA, DATA, FOTO,DESCRIZIONE };
                public static String[] TOT_SPESE_COLUMNS = new String[] {  SUM_SPESA };
               
        }


A questo punto, finalmente, nella mia classe activity carico il cursore e lo passo all'adapter

Codice (Java): [Seleziona]
public class ReportMng extends Activity{
        private  SQLiteOpenHelper dbHelper;

        private static final String ACTIVITY_TAG="ReportMng";
        private static final int REPORT_MNG=1;
       
        private static final int ID_EURO = 1;  //TODO: occorre toglierlo e renderlo dinamico
       
        private Cursor cursorTmp,cursorSpeseViaggiatori;
        private CursorAdapter adapterSpeseViaggiatori;
        private  GTMDB db;
       
       
        private String[] FROMS_REPORT = new String[] {SpeseMetaData.ID_SPESA, ViaggiatoriMetaData.NOME, SpeseMetaData.DATA,          SpeseMetaData.SPESA,SpeseMetaData.DESCRIZIONE };
        private int[] TOS_REPORT = new int[] {R.id.reportID,R.id.reportUtente, R.id.reportData, R.id.reportSpesa, R.id.reportDescrizione};
       
        private ListView lv;
        private long id_viaggio;
        private String nomeImmagine;
       
        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.report_layout);
        nomeImmagine="";
        Intent miaIntent = this.getIntent();
       
        id_viaggio=miaIntent.getExtras().getLong("id_viaggio");

        mdbHelper=new DbHelper(getApplicationContext(), DB_NAME, null, DB_VERSION);
        SQLiteDatabase db=mdbHelper.getWritableDatabase();

       
         
            db.open();
           
            String[] questiParametri={ ""+id_viaggio};
           
            cursorSpeseViaggiatori= db.rawQuery(getResources().getString(R.string.crea_report_per_viaggio), questiParametri);
       
            startManagingCursor(cursorSpeseViaggiatori);
            adapterSpeseViaggiatori = new SimpleCursorAdapter(this,R.layout.row_report,cursorSpeseViaggiatori,FROMS_REPORT,TOS_REPORT);
           
            lv =(ListView) findViewById(R.id.list_report);
            lv.setAdapter(adapterSpeseViaggiatori);
    }

}

Quando eseguo il codice lui viene eseguito senza errori o eccezioni..il problema è che non mi appare niente, la ListView è vuota come se non ci fossero record..il ché è impossibile perché il risultato contiene delle righe per forza...
secondo voi cosa potrebbe non essere corretto?

Grazie a tutti voi per l'aiuto :)
Leandro Rocchi
Software Developer - Geodatabase Designer

Offline n3tmaster

  • Utente junior
  • **
  • Post: 96
  • Respect: 0
    • Google+
    • lerocchi
    • Mostra profilo
  • Dispositivo Android:
    Nexus 4 - Nexus 7 - PadFone JB
  • Sistema operativo:
    Mac OSX 10.7
Re:Non riesco a visualizzare su una ListView i risultati di una query da sqLite
« Risposta #1 il: 24 Luglio 2012, 13:21:16 CEST »
0
ohibò...ho trovato il problema...banale tra l'altro, un altro bug inseriva un valore sbagliato nel campo _id_viaggiatore XD XD XD ora funge tutto
Leandro Rocchi
Software Developer - Geodatabase Designer