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

Résolu
rapidegoyes Messages postés 137 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 9 mai 2025 - 16 avril 2025 à 21:32
rapidegoyes Messages postés 137 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 9 mai 2025 - 7 mai 2025 à 16:07

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

A voir également:

9 réponses

rapidegoyes Messages postés 137 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 9 mai 2025 11
Modifié le 6 mai 2025 à 21:47

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
rapidegoyes Messages postés 137 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 9 mai 2025 11
5 mai 2025 à 21:31

Bonsoir BunoCS,

Merci pour le lien, je vais le consulter

Très cordialement à +++

rapidegoyes

1
rapidegoyes Messages postés 137 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 9 mai 2025 11
7 mai 2025 à 16:07

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
BoBot Messages postés 5608 Date d'inscription mardi 4 juillet 2023 Statut Modérateur Dernière intervention 9 mai 2025 343
21 avril 2025 à 21:14
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

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

Posez votre question
BunoCS Messages postés 15952 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 5 mai 2025 3 914
23 avril 2025 à 15:55

Hello,

Un lien avec ta question précédente ? https://forums.commentcamarche.net/forum/affich-38184150-recuperer-les-donnees-d-une-table

J'avoue que je suis un peu étonné de ta question. Quelle genre de "ListView" utilises-tu ?


0
rapidegoyes Messages postés 137 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 9 mai 2025 11
23 avril 2025 à 21:39

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
BunoCS Messages postés 15952 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 5 mai 2025 3 914
24 avril 2025 à 10:49

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
rapidegoyes Messages postés 137 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 9 mai 2025 11
24 avril 2025 à 21:27

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
rapidegoyes Messages postés 137 Date d'inscription samedi 22 février 2020 Statut Membre Dernière intervention 9 mai 2025 11
4 mai 2025 à 22:55

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
BunoCS Messages postés 15952 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 5 mai 2025 3 914
5 mai 2025 à 14:56

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