Partage
  • Partager sur Facebook
  • Partager sur Twitter

Non fonctionnement d'une méthode

    22 juin 2017 à 13:59:16

    Bonjour j'ai deux méthode 

    package com.exemple.demoapp;
    
    import android.app.Activity;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.util.Log;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    
    
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    
    
    import java.io.IOException;
    
    import java.util.ArrayList;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    
    
    
    public class MainActivity extends Activity {
        public MainActivity() throws IOException {
        }
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            CreatDoc(factory);
        }
    
        /*
             * Etape 1 : récupération d'une instance de la classe "DocumentBuilderFactory"
             */
        final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    
        public void CreatDoc(DocumentBuilderFactory factory) {
            try {
                /*
                 * Etape 2 : création d'un parseur
                 */
                final DocumentBuilder builder = factory.newDocumentBuilder();
    
           /*
            * Etape 3 : création d'un Document
            */
                Connect connect = new Connect();
                final Document document = builder.parse(connect.doInBackground());
                // regarder https://openclassrooms.com/courses/structurez-vos-donnees-avec-xml/dom-exemple-d-utilisation-en-java pour faire mon document XML
                //Affiche du prologue
                System.out.println("*************PROLOGUE************");
                System.out.println("version : " + document.getXmlVersion());
                System.out.println("encodage : " + document.getXmlEncoding());
                System.out.println("standalone : " + document.getXmlStandalone());
    
           /*
            * Etape 4 : récupération de l'Element racine
            */
                final Element racine = document.getDocumentElement();
    
                //Affichage de l'élément racine
                System.out.println("\n*************RACINE************");
                System.out.println(racine.getNodeName());
    
           /*
            * Etape 5 : récupération des personnes
            */
                final NodeList racineNoeuds = racine.getChildNodes();
                final int nbRacineNoeuds = racineNoeuds.getLength();
    
                for (int i = 0; i < nbRacineNoeuds; i++) {
                    if (racineNoeuds.item(i).getNodeType() == Node.ELEMENT_NODE) {
                        final Element device = (Element) racineNoeuds.item(i);
                 /*
               * Etape 6 : récupération des données de la device
               */
    		final String configId = String.valueOf( device.getElementsByTagName("configId").item(0));
                        ...                   
    final ArrayList<String> deviceInfo = new ArrayList<>();
                        deviceInfo.add(configId);
    			...
    
                         //Affichage d'une device
                        LinearLayout linearLayout = new LinearLayout(this);
                        setContentView(linearLayout);
                        linearLayout.setOrientation(LinearLayout.VERTICAL);
                        TextView Tv1 = new TextView(this);
                        TextView Tv2 = new TextView(this);
                        linearLayout.addView(Tv1);
                        linearLayout.addView(Tv2);
                        Tv1.setText("\n*************DEVICE************");
                        Tv2.setText("Name : " + friendlyName);
    
                        for(int c = 0; c < deviceInfo.size(); c++ )
                        {
                            TextView textView = new TextView(this);
                            textView.setText((String)deviceInfo.get(c));
                            linearLayout.addView(textView);
                        }
    
    
                        //Affichage des données des devices
    
                                        }
                }
            } catch (final ParserConfigurationException e) {
                e.printStackTrace();
            } catch (final SAXException e) {
                e.printStackTrace();
            } catch (final IOException e) {
                e.printStackTrace();
            }
            // return null;
        }
    }

    et 

    package com.exemple.demoapp;
    
    
    import android.os.AsyncTask;
    import android.util.Log;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.Authenticator;
    import java.net.HttpURLConnection;
    import java.net.PasswordAuthentication;
    import java.net.URL;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    
    import static android.content.ContentValues.TAG;
    import static java.lang.System.in;
    
    
    public class Connect extends AsyncTask<Void,Void,String> {
        URL url = new URL("url");
                HttpURLConnection huc = (HttpURLConnection) url.openConnection();
    
        @Override
        protected String doInBackground(Void... params) {
    
            try {
    
    
    
                Authenticator.setDefault(new Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication("login", "password".toCharArray());
                    }
                });
                huc.setConnectTimeout(2000);
                huc.setReadTimeout(2000);
                huc.setRequestProperty("Accept", "application/xml");
                huc.setRequestProperty("Content-Type", "application/xml");
                //huc.connect();
    
    
                String result = "";
                //DataInputStream dis = new DataInputStream(); and dis.readLine is deprecated so I replace with BufferedReader br = new BufferedReader(new InputStreamReader(in));  with is the updated version.
                BufferedReader br = new BufferedReader(new InputStreamReader(in));
                try {
    
                    String line = "";
                    while ((line = br.readLine()) != null) {
                        result += line;
                    }
                    return result;
    
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        br.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }  finally {
                huc.disconnect();
            }
    
            return null;
        }
    
        public Connect() throws IOException {
            Log.i(TAG, "Connect class IOExeption");
    
        }

    et du coups je n'arrive pas à afficher ce que devrais afficher ma méthode CreatDoc

    le logcat n'as pas l'aire de me dire quoi que ce sois par rapport à ce problème

    merci de prendre le temps de m'aider :) 

    • Partager sur Facebook
    • Partager sur Twitter
      22 juin 2017 à 14:49:03

      Salut,

      Tu utilises mal l'AsyncTask. pour lancer une AsyncTask, il convient d'appeler la méthode execute(). Les méthodes onPreExecute, doInBackground et onPostExecute seront alors appelées automatiquement.

      Il convient dans ta méthode doInBackground de traiter ton InputStream en tant que XML directement puis de renvoyer ce que tu veux afficher pour le binder sur l'interface graphique dans la méthode onPostExecute.

      -
      Edité par rolandl 22 juin 2017 à 14:50:24

      • Partager sur Facebook
      • Partager sur Twitter
        22 juin 2017 à 15:04:24

        tu veux que je fasse ça? 

        package com.exemple.demoapp;
        
        
        import android.os.AsyncTask;
        import android.util.Log;
        
        
        import java.io.BufferedReader;
        import java.io.IOException;
        import java.io.InputStreamReader;
        import java.net.Authenticator;
        import java.net.HttpURLConnection;
        import java.net.MalformedURLException;
        import java.net.PasswordAuthentication;
        import java.net.URL;
        
        import javax.xml.parsers.DocumentBuilderFactory;
        
        import static android.content.ContentValues.TAG;
        import static java.lang.System.in;
        
        /**
         * Created by antrey on 16/06/2017.
         */
        
        public class Connect extends AsyncTask<Void,Void,BufferedReader> {
            URL url = new URL("url");
            HttpURLConnection huc = (HttpURLConnection) url.openConnection();
        
            public Connect() throws IOException {
            }
        
            @Override
            protected BufferedReader doInBackground(Void... params) {
        
        
                Authenticator.setDefault(new Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication("login", "password".toCharArray());
                    }
                });
                huc.setConnectTimeout(2000);
                huc.setReadTimeout(2000);
                huc.setRequestProperty("Accept", "application/xml");
                huc.setRequestProperty("Content-Type", "application/xml");
                //huc.connect();
        
        
                String result = "";
                //DataInputStream dis = new DataInputStream(); and dis.readLine is deprecated so I replace with BufferedReader br = new BufferedReader(new InputStreamReader(in));  with is the updated version.
                BufferedReader br = new BufferedReader(new InputStreamReader(in));
        
        
                huc.disconnect();
        
        
                return br;
        
        
            }
        
            @Override
            protected void onPostExecute(BufferedReader bufferedReader) {
                final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                MainActivity main = null;
                try {
                    main = new MainActivity();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                main.CreatDoc(factory);
            }
        }
        

        parce que quand je fais ça j'ai un cannot resolve methode parse(jafva.IO.BufferedReader) dans ma méthode CreatDoc

        -
        Edité par AntoineREY1 22 juin 2017 à 15:06:17

        • Partager sur Facebook
        • Partager sur Twitter
          22 juin 2017 à 15:26:01

          Ton code n'a pas vraiment de sens. Pourquoi instancier une activité dans ton onPostExecute. Tu devrais lire des exemples d'utilisation des AsyncTask sur internet. Il y a des tonnes d'exemples. Ca t'aidera.

          -
          Edité par rolandl 22 juin 2017 à 18:00:23

          • Partager sur Facebook
          • Partager sur Twitter
            22 juin 2017 à 15:40:22

            le truc c'est que je les comprends pas les exemple j'ai passé la matinée à en regarder et je les comprends pas, je comprends pas comment faire ce que je veux faire en AssynckTask surtout celle sur le site d'android je la comprends pas, je sais pas quoi garder et quoi enlevé pour implémenter ce que je dois faire

            -
            Edité par AntoineREY1 22 juin 2017 à 15:44:17

            • Partager sur Facebook
            • Partager sur Twitter
              22 juin 2017 à 18:08:03

              Si tu n'arrives pas à comprendre un élément comme les AsyncTask malgré le nombre très important d'exemples sur internet, c'est peut-être que tu t'attaques à quelque chose de trop compliqué pour ton niveau.

              Je ne peux que t'encourager à relire / reprendre les cours proposés sur OpenClassrooms.

              • Partager sur Facebook
              • Partager sur Twitter
                23 juin 2017 à 9:26:10

                cert mais c'est ce qu'on me demande en stage
                • Partager sur Facebook
                • Partager sur Twitter
                  23 juin 2017 à 12:02:56

                  N'as-tu pas un maître de stage capable de t'aider... ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 juin 2017 à 15:12:28

                    surement oui mais il est souvent occupé du coups j'en profite pour poster une modification de mon code avec ce que j'ai compris de l'assyncTask (le cour sur openclassroom est plus facile à digérer que les exemple sur le net pour ma part) 

                    j'ai fait ça 

                    import android.app.Activity;
                    import android.os.AsyncTask;
                    import android.os.Bundle;
                    import android.support.annotation.Nullable;
                    import android.util.Log;
                    import android.widget.LinearLayout;
                    import android.widget.TextView;
                    
                    
                    import org.w3c.dom.Document;
                    import org.w3c.dom.Element;
                    import org.w3c.dom.Node;
                    import org.w3c.dom.NodeList;
                    import org.xml.sax.SAXException;
                    
                    
                    import java.io.BufferedReader;
                    import java.io.IOException;
                    
                    import java.io.InputStreamReader;
                    import java.net.Authenticator;
                    import java.net.HttpURLConnection;
                    import java.net.PasswordAuthentication;
                    import java.net.URL;
                    import java.util.ArrayList;
                    
                    import javax.xml.parsers.DocumentBuilder;
                    import javax.xml.parsers.DocumentBuilderFactory;
                    import javax.xml.parsers.ParserConfigurationException;
                    
                    import static android.R.attr.tag;
                    import static java.lang.System.in;
                    
                    public class MainActivity extends Activity {
                        public MainActivity() throws IOException {
                        }
                    
                        @Override
                        protected void onCreate(@Nullable Bundle savedInstanceState) {
                            super.onCreate(savedInstanceState);
                            setContentView(R.layout.activity_main);
                            try {
                                Connect connect = new Connect();
                                connect.execute();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                        public class Connect extends AsyncTask<Object, Object, ArrayList<String>> {
                            URL url = new URL("URL");
                            HttpURLConnection huc = (HttpURLConnection) url.openConnection();
                    
                            public Connect() throws IOException {
                            }
                            MainActivity mainActivity = new MainActivity();
                            @Override
                            protected void onPreExecute() {
                    
                    
                            }
                    
                            @Override
                            protected ArrayList<String> doInBackground(Object... params) {
                                Authenticator.setDefault(new Authenticator() {
                                    protected PasswordAuthentication getPasswordAuthentication() {
                                        return new PasswordAuthentication("login", "password".toCharArray());
                                    }
                                });
                                huc.setConnectTimeout(2000);
                                huc.setReadTimeout(2000);
                                huc.setRequestProperty("Accept", "application/xml");
                                huc.setRequestProperty("Content-Type", "application/xml");
                                try {
                                    huc.connect();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                                Log.d(String.valueOf(tag), "huc connecté");
                    
                    
                                String result = "";
                                //DataInputStream dis = new DataInputStream(); and dis.readLine is deprecated so I replace with BufferedReader br = new BufferedReader(new InputStreamReader(in));  with is the updated version.
                                BufferedReader br = new BufferedReader(new InputStreamReader(in));
                    
                    
                                huc.disconnect();
                                try {
                                    final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                                /*
                                 * Etape 2 : création d'un parseur
                                 */
                                    final DocumentBuilder builder = factory.newDocumentBuilder();
                    
                    	    /*
                    	     * Etape 3 : création d'un Document
                    	     */
                    
                                    final Document document = builder.parse(String.valueOf(br));
                                    // regarder https://openclassrooms.com/courses/structurez-vos-donnees-avec-xml/dom-exemple-d-utilisation-en-java pour faire mon document XML
                                    //Affiche du prologue
                                    System.out.println("*************PROLOGUE************");
                                    System.out.println("version : " + document.getXmlVersion());
                                    System.out.println("encodage : " + document.getXmlEncoding());
                                    System.out.println("standalone : " + document.getXmlStandalone());
                    
                    	    /*
                    	     * Etape 4 : récupération de l'Element racine
                    	     */
                                    final Element racine = document.getDocumentElement();
                    
                                    //Affichage de l'élément racine
                                    System.out.println("*************RACINE************");
                                    System.out.println(racine.getNodeName());
                    
                    	    /*
                    	     * Etape 5 : récupération des personnes
                    	     */
                                    final NodeList racineNoeuds = racine.getChildNodes();
                                    final int nbRacineNoeuds = racineNoeuds.getLength();
                    
                                    for (int i = 0; i < nbRacineNoeuds; i++) {
                                        if (racineNoeuds.item(i).getNodeType() == Node.ELEMENT_NODE) {
                                            final Element device = (Element) racineNoeuds.item(i);
                                 /*
                    		     * Etape 6 : récupération des données de la device
                    		     */
                                            final String DeviceId ="Id:"+ String.valueOf(device.getElementsByTagName("id").item(0));
                                            final ArrayList<String> deviceInfo = new ArrayList<>();
                                            deviceInfo.add(friendlyName);
                                           
                     		return deviceInfo;
                    
                                        }
                                    }
                    
                                }catch (final ParserConfigurationException e) {
                                            e.printStackTrace();
                                        } catch (final SAXException e) {
                                            e.printStackTrace();
                                        } catch (final IOException e) {
                                            e.printStackTrace();
                                        }
                                        finally {
                                    return null;
                                }
                    
                    
                    
                    
                    
                    
                            }
                    
                            @Override
                            protected void onPostExecute(ArrayList<String> deviceInfo) {
                                        if (deviceInfo != null){
                                            //Affichage d'une device
                                            LinearLayout linearLayout = new LinearLayout(mainActivity);
                                            setContentView(linearLayout);
                                            linearLayout.setOrientation(LinearLayout.VERTICAL);
                                            TextView Tv1 = new TextView(mainActivity);
                    
                                            linearLayout.addView(Tv1);
                    
                                            Tv1.setText("\n*************DEVICE************");
                    
                    
                                            for(int c = 0; c < deviceInfo.size(); c++ )
                                            {
                                                TextView textView = new TextView(mainActivity);
                                                textView.setText(deviceInfo.get(c));
                                                linearLayout.addView(textView);
                                            }
                    
                    
                    }
                                        }
                    
                    
                    
                            }
                    
                    
                        }
                    
                    
                    
                    
                    
                    

                    et ça ne fonctionne toujours et j'ai un 06-23 14:33:34.025 1341-1341/? E/adbd: failed to connect to socket 'localabstract:com.exemple.demoapp': Connection refused

                    J'espère enfin avoir compris comment on utilise l'assyncTask car c'est quelque-chose de très intéressant à mettre en place 

                    merci pour votre aide ça m'aide beaucoup

                    -
                    Edité par AntoineREY1 23 juin 2017 à 16:41:17

                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 juin 2017 à 16:41:23

                      C'est bien mieux !

                      Par contre ce n'est pas comme ça que l'on fait des listes. Regarde du côté des ListView ou mieux, du côté des RecyclerView ;)

                      Pour savoir où ton code échoue, je t'encourage à utiliser les points d'arrêt ou de mettre des logs et vérifier les affichages dans le logcat.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 juin 2017 à 16:42:35

                        oui j'ai réussi à trouvé un 06-23 14:33:34.025 1341-1341/? E/adbd: failed to connect to socket 'localabstract:com.exemple.demoapp': Connection refused t'as été plus rapide que moi j'ai modifié mon post en même temps que toi tu mettais ton post en ligne ^^'

                        -
                        Edité par AntoineREY1 23 juin 2017 à 16:42:52

                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 juin 2017 à 21:03:28

                          appelles-tu bien une URL accessible depuis partout ? Est-ce une adresse "locale" ?

                          • Partager sur Facebook
                          • Partager sur Twitter
                            26 juin 2017 à 9:54:58

                            alors l'url que j'appelle c'est une API se trouvant sur un serveur OVH donc oui elle est accessible à tout ceux qui ont les identifiants de connexion
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Non fonctionnement d'une méthode

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown