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 :

Chargement XML depuis un site


Sujet :

Android

  1. #21
    Membre averti
    Profil pro
    Inscrit en
    Février 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 35
    Par défaut
    Après être passé en mode debug mon code passe directement de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thread thread = new Thread(new Runnable() {
    à


  2. #22
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    je te conseille de lire ce tutoriel pour utiliser des Threads
    http://mathias-seguy.developpez.com/...async_memleak/

  3. #23
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Oui parce que le code (à l’extérieur du thread) est exécute immédiatement, avant même que le thread n'aie pu vraiment démarrer...
    Donc la liste est toujours vide...

    Non.. franchement, utilise un AsyncTask pour ce que tu veux faire....
    L'UI ne peut être modifiée depuis un thread autre que le thread UI.
    Le thread UI n'a pas le droit de faire des opération longue.
    La classe qui relie les deux: c'est AsyncTask (ou les Loader mais bon...).

    (template de code, il ne compile pas, c'est juste pour montrer !)
    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
     
    class MyActivity extends Activity
    {
         public void onCreate()
         {
              super.onCreate();
              ...
              new AsyncTask<String,ArrayList<ArrayList<String>,Void>() {
                  @Override
                  public ArrayList<ArrayList<String>> doInBackground() {
                         ... le code de ton "thread", avec un return de l'array-list finale à la fin... PAS D'UTILISATION DE VARIABLE DE MY-ACTIVITY
                   }
     
                  @Override
                   public void onPostExecute(ArrayList<ArrayList<String>>) {
                         ... modification de l'UI... car ici, on est dans le bon thread UI !
                   }
               }.execute();
          }
     
    }

  4. #24
    Membre averti
    Profil pro
    Inscrit en
    Février 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 35
    Par défaut
    D'accord, j'ai suivi tes conseils et j'ai utilisé un AsyncTask.
    Mais bien sûr ça ne marche pas..
    Je ne rentre même pas dans mon AsyncTask

    Voici mon code:
    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
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
     
    		new MyAsyncTask().execute();
     
    	}
     
    	private class MyAsyncTask extends AsyncTask<Void, Void, ArrayList<ArrayList>> {
     
            protected ArrayList<ArrayList> doInBackground(Void... params) {
     
         	 try {
     
     
    				 URL url = new URL("http://www.androidpeople.com/wp-content/uploads/2010/06/example.xml");
     
    			        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
     
    			        DocumentBuilder db = dbf.newDocumentBuilder();
    			        Log.d("TAG","Been here... done that...");
     
    			        InputStream in = url.openStream() ;
     
    			        Log.d("TAG","Been here... done that...");
     
    			        Document doc = db.parse(new InputSource(in));
    			       Log.d("TAG","Been here... done that...");
     
     
    			        doc.getDocumentElement().normalize();
     
    			      NodeList nodeList = doc.getElementsByTagName("website");
     
     
    			      //  NodeList nodeList = doc.getElementsByTagName("item");
    			        for (int i = 0; i < nodeList.getLength(); i++) {
    			         ArrayList<String>  aTableauTmp =  new ArrayList<String>(); 
    			        aTableauTmp =  new ArrayList<String>(); 
    			        Node node = nodeList.item(i);
    			        Element fstElmnt = (Element) node;
    			        aTableauTmp.add(fstElmnt.getAttribute("category"));
    			        aTableRetour.add(aTableauTmp);
     
     
    			        }
     
    				} catch (Exception e) {
    					Log.e("TAG","XML parsing errror",e);
     
    				}
                return aTableRetour;
     
            }

  5. #25
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Avec ce code, tu rentres forcément dans l'AsyncTask... avec des Log appropriés...

  6. #26
    Membre averti
    Profil pro
    Inscrit en
    Février 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 35
    Par défaut
    Oui effectivement après avoir inséré un toast dans ma méthode onPostExecute(Void result), j'ai pu constater que je rentrais bien dans mon AsyncTask.

    C'est bon je suis enfin arrivé à remplir mon arrayList avec les données de mon XML.

    Voici mon code:

    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
    public class MainActivity extends Activity {
     
     
    	ArrayList<ArrayList> aTableRetour = new ArrayList<ArrayList>();
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		new MyAsyncTask().execute();
    	}
     
     
    	private class MyAsyncTask extends AsyncTask<Void, Void, Void> {
     
            protected Void doInBackground(Void... params) {
         	 try {
     				 URL url = new URL("http://www.androidpeople.com/wp-content/uploads/2010/06/example.xml");
     
    			        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
     
    			        DocumentBuilder db = dbf.newDocumentBuilder();
    			        Log.d("TAG","Been here... done that...");
     
    			        InputStream in = url.openStream() ;
     
    			        Log.d("TAG","Been here... done that...");
     
    			        Document doc = db.parse(new InputSource(in));
    			       Log.d("TAG","Been here... done that...");
     
     
    			        doc.getDocumentElement().normalize();
     
    			      NodeList nodeList = doc.getElementsByTagName("website");
     
    			        for (int i = 0; i < nodeList.getLength(); i++) {
    			         ArrayList<String>  aTableauTmp =  new ArrayList<String>(); 
    			        aTableauTmp =  new ArrayList<String>(); 
    			        Node node = nodeList.item(i);
    			        Element fstElmnt = (Element) node;
    			        aTableauTmp.add(fstElmnt.getAttribute("category"));
    			        aTableRetour.add(aTableauTmp);
    			        }
     
    				} catch (Exception e) {
    					Log.e("TAG","XML parsing errror",e);
    				}
     
            	return null;
            }
     
            protected void onProgressUpdate( Void... progress) {
     
            }
     
            protected void onPostExecute(Void result) {
     
            	 for (ArrayList v : aTableRetour)
            	 {
            		 Toast.makeText(MainActivity.this, v.get(0).toString(), 0).show(); 
            	 }
     
            }
    Je pense que maintenant c'est bon et qu'il n'y a plus de fautes.

    Merci beaucoup .

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Enregistrer le contenu XML depuis site web
    Par h2qutc dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/03/2014, 14h07
  2. chargement images depuis un site
    Par Gob59 dans le forum Android
    Réponses: 3
    Dernier message: 30/04/2013, 18h35
  3. Chargement DataGrid depuis XML
    Par urubs dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 25/10/2011, 20h50
  4. [AJAX/XML/JAVA] Afficher un flux de données depuis un site web
    Par chodaboy34 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/10/2006, 17h38
  5. Recupération de données XML depuis une URL
    Par tonymo dans le forum Format d'échange (XML, JSON...)
    Réponses: 27
    Dernier message: 21/11/2005, 14h48

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