IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Requête MySQL Java, List Null erreur crash


Sujet :

Android

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 2
    Par défaut Requête MySQL Java, List Null erreur crash
    Bonjour,

    je suis étudiant en classe préparatoire, et j'ai décidé dans le cadre des TIPE, sorte de projet personnel pour les concours, de m'essayer à quelque chose de nouveau: développer une application.
    Habitué à de nombreux langages (python, Ocaml, HTML/JS/CSS, C pour Arduino) , le XML m'a semblé très intuitif, mais avec java j'ai du mal...

    Cela fait quelques jours que j'essaie d'afficher le contenu d'une colonne stockée sur un serveur MySQL sans succès. Je suis au courant que ne pas utiliser de PHP peut sembler dangereux mais le projet est personnel donc développer un PHP n'es vraiment pas nécessaire ici. J'ai d'avantage besin d'une solution d'exploration rapide de nombreuses données disponibles sur ma BDD que d'un accès maîtrisé et stable.

    voici mon code me posant problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
    package com.monapp.ui.gallery;
     
    import android.app.ProgressDialog;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    import android.widget.TextView;
     
    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    import androidx.fragment.app.Fragment;
    import androidx.lifecycle.Observer;
    import androidx.lifecycle.ViewModelProviders;
     
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Objects;
     
    import android.content.Context;
    import android.os.AsyncTask;
     
    import com.monapp.R;
     
    public class GalleryFragment extends Fragment {
        static final String url = "jdbc:mysql://MON.IP:3306/tipe-ag_principale";
        static final String user = "mon_identifiant";
        static final String pass = "mon_mot_de_passe";
        public static List<Float> objList;
        private GalleryViewModel galleryViewModel;
     
     
        public View onCreateView(@NonNull LayoutInflater inflater,
                                 ViewGroup container, Bundle savedInstanceState) {
     
            galleryViewModel =
                    ViewModelProviders.of(this).get(GalleryViewModel.class);
            View root = inflater.inflate(R.layout.fragment_gallery, container, false);
            final TextView textView = root.findViewById(R.id.text_gallery);
            final ListView listeView= root.findViewById(R.id.listView);
            new Download(getContext(), url, user, pass);
            final ArrayAdapter<Float> adapter = new ArrayAdapter<Float>(getContext(),android.R.layout.simple_list_item_1, objList);
     
            galleryViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>()
            {
                @Override
                public void onChanged(@Nullable String s) {
     
                textView.setText("test");
                listeView.setAdapter(adapter);
     
                    //android.R.layout.simple_list_item_1 est une vue disponible de base dans le SDK android,
                    //Contenant une TextView avec comme identifiant "@android:id/text1"
     
                }
            });
            return root;
        }
     
     
    public class Download extends AsyncTask<Void, Void, String> {
        ProgressDialog mProgressDialog;
        Context context;
        private String url;
        private String user;
        private String pass;
        public Download(Context context, String url, String user, String pass) {
            this.context = context;
            this.url = url;
            this.user = user;
            this.pass = pass;
        }
     
        protected void onPreExecute() {
            mProgressDialog = ProgressDialog.show(context, "",
                    "Please wait, getting database...");
     
        }
        protected String doInBackground(Void... params) {
     
            try {
     
                Class.forName("com.mysql.jdbc.Driver");
                java.sql.Connection con = DriverManager.getConnection(url, user, pass);
                java.sql.Statement st = con.createStatement();
                java.sql.ResultSet rs = st.executeQuery("Produits");
                ArrayList<Float> list = new ArrayList<Float>();
                while (rs.next()) {
                    Float field= rs.getFloat(2);
                    GalleryFragment.objList.add(new Float (field));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            return "Complete";
        }
        protected void onPostExecute(String result) {
            if (result.equals("Complete")) {
                mProgressDialog.dismiss();
            }
        }
    }}
    lors de l'ouverture du fragment sur l'émulateur, l'appli crash et le Logcat dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
            at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:392)
            at android.widget.ListView.setAdapter(ListView.java:585)
            at com.monapp.ui.gallery.GalleryFragment$1.onChanged(GalleryFragment.java:62)
            at com.monapp.ui.gallery.GalleryFragment$1.onChanged(GalleryFragment.java:57)
    j'ai essayé sans succès de trouver une solution pour que la liste soit différentes de null.. je m'en remet donc à vous.

    Merci de votre aide!

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Tu créer ton adapteur avec un liste d'objet non intialisée (donc null)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    final ArrayAdapter<Float> adapter = new ArrayAdapter<Float>(getContext(),android.R.layout.simple_list_item_1, objList);
    Un adapteur essai de déterminer le nombre d'élément en faisant un size sur le conteneur qu'on lui passe (ici objList) or dans ton cas il est null d'où l'erreur.

    il faut donc, avant de l'utiliser , initialiser objList.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2020
    Messages : 2
    Par défaut
    Merci beaucoup! J'ai réussi à m'en sortir en initialisant correctement mes éléments.

    Cependant, un problème subsiste: j'essaie de me connecter à ma bdd, et à chaque connexion j'ai droit à "Communication Link Failure, Last packet sent to the server was 0ms ago."

    J'ai essayé de changer mes imports entre mysql.jdbc et java.sql, revérifié 50 fois mes identifiants mais rien n'y fait cela ne fonctionne pas.
    Si vous avez une piste, je suis preneur, j'ai fait plusieurs fois le tour du net et rien ne m'a permit de palier à ce problème.
    Je tiens à préciser que l'accès à la base marche: l'écriture de cette dernière se fait depuis un programme Pyhon (à distance) sans aucun souci, et j'utilise le même utilisateur pour la lire avec java.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.ListView;
    import android.widget.TextView;
     
    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    import androidx.fragment.app.Fragment;
    import androidx.lifecycle.Observer;
    import androidx.lifecycle.ViewModelProviders;
     
     
    import com.gaelaugustin.tipe_trading.R;
     
    import java.sql.*;
    import com.mysql.jdbc.Driver.*;
    import java.util.ArrayList;
    import java.util.List;
     
     
    public class GalleryFragment extends Fragment {
        private GalleryViewModel galleryViewModel;
        private boolean X = true;
        private List<String> prenoms = new ArrayList<String>();
     
     
        public View onCreateView(@NonNull LayoutInflater inflater,
                                 ViewGroup container, Bundle savedInstanceState) {
     
            galleryViewModel =
                    ViewModelProviders.of(this).get(GalleryViewModel.class);
            View root = inflater.inflate(R.layout.fragment_gallery, container, false);
            final TextView textView = root.findViewById(R.id.text_gallery);
            final ListView listeView= root.findViewById(R.id.listView);
            Button bt1 = root.findViewById(R.id.load);
     
            bt1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    test();
                    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(),android.R.layout.simple_list_item_1, prenoms);
                    listeView.setAdapter(adapter);
                }
            });
     
     
            galleryViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>()
            {
                @Override
                public void onChanged(@Nullable String s) {
     
                textView.setText(s);
     
                    //android.R.layout.simple_list_item_1 est une vue disponible de base dans le SDK android,
                    //Contenant une TextView avec comme identifiant "@android:id/text1"
     
                }
            });
            return root;
        }
        public void test() {
            try {
                Class c = Class.forName( "com.mysql.jdbc.Driver" );
                Driver pilote = (Driver)c.newInstance() ;
                // enregistrement du pilote auprès du DriverManager
                DriverManager.registerDriver(pilote);
                // Protocole de connexion
            } catch ( ClassNotFoundException e ) {
                Storage("le debut");
            } catch (IllegalAccessException | java.lang.InstantiationException | SQLException e) {
                e.printStackTrace();
            }
            String url = "jdbc:mysql://MON_IP:3306/Mabdd";
            String utilisateur = "mon identifiant";
            String motDePasse = "mon mot de passe";
            Connection connexion = null;
            Statement statement = null;
            ResultSet resultat = null;
            try {
                connexion = DriverManager.getConnection( url, utilisateur, motDePasse );
                statement = connexion.createStatement();
                /* Exécution d'une requête de lecture */
                resultat = statement.executeQuery( "SELECT id, nom, prenom FROM eleve");
     
                /* Récupération des données du résultat de la requête de lecture */
                while ( resultat.next() ) {
                    int idUtilisateur = resultat.getInt( "id" );
                    String Nomu = resultat.getString( "nom" );
                    String motDePasseUtilisateur = resultat.getString( "prenom" );
                }
     
            } catch ( SQLException e ) {
                Storage(e.getMessage());
            } finally {  if ( resultat != null ) {
                try {
                    Storage("resultat");
                    resultat.close();
                } catch ( SQLException ignore ) {
                }
            }
                if ( statement != null ) {
                    try {
                        Storage("statement");
                        statement.close();
                    } catch ( SQLException ignore ) {
                    }
                }
                if ( connexion != null )
                    try {
                        Storage("connexion");
                        connexion.close();
                    } catch ( SQLException ignore ) {
                    }
            }}
        public void Storage(String s){
            prenoms.add(s);
    }}

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/01/2014, 15h52
  2. [MySQL] erreur sur une requête mysql
    Par Philcmoi dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/10/2008, 13h48
  3. [MySQL] Erreur de requête MySQL
    Par nO_life dans le forum PHP & Base de données
    Réponses: 37
    Dernier message: 14/09/2008, 15h10
  4. [MySQL] Erreur requête MySQL
    Par franfr57 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 21/03/2008, 12h53
  5. [MySQL 4.0.15] Erreur requête imbriquée
    Par X-K4l1 dans le forum Requêtes
    Réponses: 6
    Dernier message: 28/07/2006, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo