Copier un nombre de ma listview et le placer dans une variab

Résolu
rapidegoyes Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
rapidegoyes Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,

Je code avec android studio en utilisant java.

J'ai une listview qui affiche des nombres en int.

De cette liste j'aimerai copier ou récupérer un de ces nombres.

Merci de bien vouloir m'orienter.

Cordialement

rapidegoyes


Windows / Firefox 137.0

9 réponses

  1. rapidegoyes Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   13
     

    Bonsoir BunoCS,

    Super c'est bon les valeurs sont dans le Cursor.

    A force de persévérer ça paye!

    Il fallait mettre le nom de la colonne recherchée en majuscules. msyst en MSYST

    Voici ci-dessous la sortie Logcat avec erreur et sans erreurs et en dessous le code concerné:

    Vérifications des résultats et erreurs dans Logcat (Log ,E ou Log,d)

    SQLQuery -------> D Requête exécutée : SELECT msyst FROM archives

    CursorCheck -------> D Nombre de colonnes : 1

    CursorCheck -------> D Noms des colonnes : [MSYST]

    CursorCheck -------> E La colonne msyst est ABSENTE !

    CursorData -------> E Error processing cursor data:column 'msyst' does not exist

    Vérifications des résultats Tous est correct les valeurs sont dans le Cursor

    SQLQuery -------> D Requête exécutée : SELECT MSYST FROM archives

    CursorCheck ------------> D Nombre de colonnes : 1

    CursorCheck ------------> D Noms des colonnes : [MSYST]

    CursorCheck ------------> D La colonne msyst est présente !

    ColumnNames ------------> D Column names are: [MSYST]

    CursorData ------------> D ID:, msyst:136 //la valeur recherchée

    CursorData ------------> D ID:, msyst:128 //idem

    Le code correct

    db = new SQLiteDataBaseHelper(this);//déclaration de l'objet base de données suite
            SQLiteDatabase readableDb = db.getReadableDatabase();
    
            Cursor cursor = null;
            
            try {
                // Requête pour sélectionner uniquement la colonne 'msyst'
                String query = "SELECT MSYST FROM archives";
                Log.d("SQLQuery", "Requête exécutée : " + query);
                cursor = readableDb.rawQuery(query, null);
    
               //***************************
                if (cursor == null){
                    Log.e("CursorCheck","Cursor is null");
                }else {
                    Log.d("CursorCheck", "Nombre de colonnes : " + cursor.getColumnCount());
                    String[] columnNames = cursor.getColumnNames();
                    Log.d("CursorCheck", "Noms des colonnes : " + java.util.Arrays.toString(columnNames));
                    if (cursor.getColumnIndex("MSYST") != -1) {
                        Log.d("CursorCheck", "La colonne msyst est présente !");
                    } else {
                        Log.e("CursorCheck", "La colonne msyst est ABSENTE !");
                    }
                }
                //*****************************
    
                // Vérifier si le curseur contient des données
                if (cursor != null && cursor.moveToFirst()) {
                    //int idColumnIndex = cursor.getColumnIndex("id");
                    // Obtenir l'index de la colonne 'msyst'
                    int MSYSTColumnIndex = cursor.getColumnIndexOrThrow("MSYST");
                    List<Integer> MSYSTValues = new ArrayList<>();
    
                    // Get column names pour voir les noms des colonnes
                    String[] columnNames = cursor.getColumnNames();
                    Log.d("ColumnNames", "Column names are: " + Arrays.toString(columnNames)); //Add this line for debug
    
                    // Parcourir les résultats et récupérer les valeurs de 'msyst'
                    do {
                        //int id = cursor.getInt(idColumnIndex);
                        int MSYST = cursor.getInt(MSYSTColumnIndex);
                        MSYSTValues.add(MSYST); // Ajouter la valeur à la liste
    
                        Log.d("CursorData", "ID:" + ", msyst:" + MSYST);
    
                    } while (cursor.moveToNext());
                } else{
                    Log.w("CursorData", "No data found in the cursor");
                }
    
            }
            catch (Exception e){
                Log.e("CursorData", "Error processing cursor data:" + e.getMessage());
            }
            finally {
                if (cursor != null) {
                    cursor.close();
                }
                if (readableDb != null) {
                    readableDb.close();
                }
            }
    

    En tout cas un grand merciiiiiiiiiii à toi pour le temps que tu consacres pour la vie du forum et pour m'aider.

    Je vais maintenant continuer par ce que tu m'as donné pour peupler le graphique.

    Très cordialement rapidegoyes

    et à +++

    2
  2. rapidegoyes Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   13
     

    Bonsoir BunoCS,

    Merci pour le lien, je vais le consulter

    Très cordialement à +++

    rapidegoyes

    1
  3. rapidegoyes Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   13
     

    Bonsoir BunoCS,

    Super c'est bon les valeurs sont dans le Cursor.

    A force de persévérer ça paye!

    Il fallait mettre le nom de la colonne recherchée en majuscules. msyst en MSYST

    Voici ci-dessous la sortie Logcat avec erreur et sans erreurs et en dessous le code concerné:

    Vérifications des résultats et erreurs dans Logcat (Log ,E ou Log,d)

    SQLQuery -------> D Requête exécutée : SELECT msyst FROM archives

    CursorCheck -------> D Nombre de colonnes : 1

    CursorCheck -------> D Noms des colonnes : [MSYST]

    CursorCheck -------> E La colonne msyst est ABSENTE !

    CursorData -------> E Error processing cursor data:column 'msyst' does not exist

    Vérifications des résultats Tous est correct les valeurs sont dans le Cursor

    SQLQuery -------> D Requête exécutée : SELECT MSYST FROM archives

    CursorCheck ------------> D Nombre de colonnes : 1

    CursorCheck ------------> D Noms des colonnes : [MSYST]

    CursorCheck ------------> D La colonne msyst est présente !

    ColumnNames ------------> D Column names are: [MSYST]

    CursorData ------------> D ID:, msyst:136 //la valeur recherchée

    CursorData ------------> D ID:, msyst:128 //idem

    Le code correct

    db = new SQLiteDataBaseHelper(this);//déclaration de l'objet base de données suite
            SQLiteDatabasereadableDb = db.getReadableDatabase();
    
            Cursorcursor = null;
            
            try {
                // Requête pour sélectionner uniquement la colonne 'msyst'
                Stringquery = "SELECT MSYST FROM archives";
                Log.d("SQLQuery", "Requête exécutée : " + query);
                cursor = readableDb.rawQuery(query, null);
    
               //***************************
                if (cursor == null){
                    Log.e("CursorCheck","Cursor is null");
                }else {
                    Log.d("CursorCheck", "Nombre de colonnes : " + cursor.getColumnCount());
                    String[] columnNames = cursor.getColumnNames();
                    Log.d("CursorCheck", "Noms des colonnes : " + java.util.Arrays.toString(columnNames));
                    if (cursor.getColumnIndex("MSYST") != -1) {
                        Log.d("CursorCheck", "La colonne msyst est présente !");
                    } else {
                        Log.e("CursorCheck", "La colonne msyst est ABSENTE !");
                    }
                }
                //*****************************
    
                // Vérifier si le curseur contient des données
                if (cursor != null && cursor.moveToFirst()) {
                    //int idColumnIndex = cursor.getColumnIndex("id");
                    // Obtenir l'index de la colonne 'msyst'
                    int MSYSTColumnIndex = cursor.getColumnIndexOrThrow("MSYST");
                    List<Integer>MSYSTValues = new ArrayList<>();
    
                    // Get column names pour voir les noms des colonnes
                    String[] columnNames = cursor.getColumnNames();
                    Log.d("ColumnNames", "Column names are: " + Arrays.toString(columnNames)); //Add this line for debug
    
                    // Parcourir les résultats et récupérer les valeurs de 'msyst'
                    do {
                        //int id = cursor.getInt(idColumnIndex);
                        int MSYST = cursor.getInt(MSYSTColumnIndex);
                        MSYSTValues.add(MSYST); // Ajouter la valeur à la liste
    
                        Log.d("CursorData", "ID:" + ", msyst:" + MSYST);
    
                    } while (cursor.moveToNext());
                } else{
                    Log.w("CursorData", "No data found in the cursor");
                }
    
            }
            catch (Exceptione){
                Log.e("CursorData", "Error processing cursor data:" + e.getMessage());
            }
            finally {
                if (cursor != null) {
                    cursor.close();
                }
                if (readableDb != null) {
                    readableDb.close();
                }
            }
    

    En tout cas un grand merciiiiiiiiiii à toi pour le temps que tu consacres pour la vie du forum et pour m'aider.

    Je vais maintenant continuer par ce que tu m'as donné pour peupler le graphique.

    Très cordialement rapidegoyes

    et à +++

    1
  4. CCMBot
     
    Bonjour !
    C'est moi, Bobot, votre IA préférée !
    Dans Android Studio, tu peux en effet récupérer la valeur d'un élément cliqué de ta ListView.
    Voici comment faire :

    1. Ajoute un `setOnItemClickListener` à ta ListView.
    2. Dans le `onItemClick`, tu peux récupérer l'objet de la position cliquée, le convertir en Integer et l'assigner à ta variable.

    Voici un exemple de code qui pourrait t'aider :

    ```java
    ListView maListView = (ListView) findViewById(R.id.maListView);
    maListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    // récupération de la valeur de l'élément cliqué
    int valeur = (Integer) parent.getItemAtPosition(position);
    // assignation de la valeur à une variable
    maVariable = valeur;
    }
    });
    ```

    Ajuste cet exemple à tes besoins.

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. rapidegoyes Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   13
     

    Bonsoir BunoCS

    Je m'explique, depuis notre dernier post j'ai importé une librairie pour afficher un graphique à barres, différente de celle que nous avions vu ensemble. Elle est basée sur java et fonctionne super bien.

    "com.github.PhilJay:MPAndroidChart"

    Le graphique est peuplé par un ArrayList que voici:

     private  ArrayList<BarEntry> getBarEntries() {
            // Creating a new ArrayList
            // Création d'une nouvelle ArrayList
            barEntries = new ArrayList<>();
    
            // Adding entries to the ArrayList for the first set
            // Ajout d'entrées à l'ArrayList pour le premier ensemble
            barEntries.add(new BarEntry(1f, 138));
            barEntries.add(new BarEntry(2f, sumSyst));
            barEntries.add(new BarEntry(3f, 144));
            barEntries.add(new BarEntry(4f, 136));
            barEntries.add(new BarEntry(5f, 131));// transfert de la variable
            barEntries.add(new BarEntry(6f, 0));
            barEntries.add(new BarEntry(7f, 0));
            barEntries.add(new BarEntry(8f, 0));
            barEntries.add(new BarEntry(9f, 0));
            barEntries.add(new BarEntry(10f, 0));
            barEntries.add(new BarEntry(11f, 0));
            barEntries.add(new BarEntry(12f, 0));
    
            return barEntries;

    La variable sumSyst est un essai de variable issue de mon code qui s'est bien reportée dans le graphique.

    Pour en venir à ta question: Dans ma BDD j'ai créé une deuxième table nommée archive elle a comme fonction de sauvegarder une douzaine de relevés de tension en somme un archivage de mes datas. Les données y sont affichées à l'aide d'un ListView.à partir d'un fichier .xml.

    Après le relevé N° 12 j'ai l'intention d'afficher l'ensemble des 12 datas dans le graphique à barres.

    Il me faut donc peupler mon ArrayList barEntries ci-dessus avec mes 12 données.

    1)--En ce moment je code pour essai des requêtes qui devrait me renvoyer un Cursor.

    2)--Mon problème est de parcourir ce Cursor et transférer mes données dans mon ArrayList barEntrie.

    Je pense avoir fait le tour si tu pourrais me donner quelques conseils et aide.En ce moment je fait des essais avec Gémini.

    Avec mes  remerciements très cordialement

    A+++ rapidegoyes

    0
  7. BunoCS Messages postés 5034 Date d'inscription   Statut Modérateur Dernière intervention   3 930
     

    As-tu réussi à récupérer ton Cursor ? Si oui, c'est relativement simple de créer un ArrayList à partir de celui-ci. Quelques choses comme ça:

    ArrayList<BarEntry> list = new ArrayList<>();
    
    // Récupération du Cursor
    // ici
    
    // Parcours du Cursor
    int i=0;
    while(cursor.moveToNext()) {
        int valeur = cursor.getInteger(cursor.getColumnIndex(COLUMN_VALEUR));
        BarEntry entry = new BarEntry (i++, valeur);
        list.add(entry);
    }

    0
  8. rapidegoyes Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   13
     

    Bonsoir BunoCS,

    Merci pour ton aide, je vais essayer cette manip avec le Cursor. Dès que j'aurai quelque chose de cohérent je t’en ferai part.Je dois reporter mes essais à la semaine prochaine, impératif de famille....

    A+++ très cordialement

    rapidegoyes

    0
  9. rapidegoyes Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   13
     

    Bonsoir BunoCS,

    Je ne réussi pas à remplir le cursor de mes données.

    Ce dernier je l'ai créé avec l'aide de gemini mais au moment de la vérification des données contenu,

    j'ai des erreurs copie du logcat comme suit:

    Failed to read row 0, column -1 from a CursorWindow which has 2 rows, 2 columns.
     E  Error processing cursor data:Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.

    J'ai modifié mon code à plusieurs reprise sans succès comme ci-dessous:

     db = new SQLiteDataBaseHelper(this);//déclaration de l'objet base de données suite
            SQLiteDatabase readableDb = db.getReadableDatabase();
    
            Cursor cursor = null;
            
            try {
                String query = "SELECT ID as _id, msyst FROM archives";
                cursor = readableDb.rawQuery(query, null);
    
                if (cursor != null && cursor.moveToFirst()) {
                    int idColumnIndex = cursor.getColumnIndex("id");
                    int msystColumnIndex = cursor.getColumnIndex("msyst");
    
                    // Get column names pour voir les noms des colonnes
                    String[] columnNames = cursor.getColumnNames();
                    Log.d("ColumnNames", "Column names are: " + Arrays.toString(columnNames)); //Add this line for debug
    
                    do {
                        int id = cursor.getInt(idColumnIndex);
                        int msyst = cursor.getInt(msystColumnIndex);
    
                        Log.d("CursorData", "ID:" + id + ", msyst:" + msyst);
    
                    } while (cursor.moveToNext());
                } else{
                    Log.w("CursorData", "No data found in the cursor");
                }
    
            }
            catch (Exception e){
                Log.e("CursorData", "Error processing cursor data:" + e.getMessage());
            }
            finally {
                if (cursor != null) {
                    cursor.close();
                }
                if (readableDb != null) {
                    readableDb.close();
                }
            }
    

    Où intervenir pour corriger cette erreur ?

    Merci de bien vouloir m'épauler

    Cordialement rapidegoyes

    0
    1. BunoCS Messages postés 5034 Date d'inscription   Statut Modérateur Dernière intervention   3 930
       

      Tu trouveras un mini guide basique sur l'utilisation de SQLite sur Android : https://developer.android.com/training/data-storage/sqlite?hl=fr#java

      Généralement, une requête est de la forme:

      SELECT * FROM table WHERE condition

      avec :

      - * = je veux récupérer toutes les colonnes

      - table = le nom de la table dans laquelle faire la recherche

      - condition = condition à remplir pour retourner un enregistrement

      0