Besoin d'aide pour une application android

Résolu
lou1991 Messages postés 1 Date d'inscription samedi 31 août 2013 Statut Membre Dernière intervention 31 août 2013 - 31 août 2013 à 13:32
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 - 4 sept. 2013 à 13:27
bonjour à tous
voila jai besoin d'aide, je programme un aappwidget qui se remet à jour en téléchargeant un fichier xml sur l'adresse http://www.rp5.ru/xml/10288/00000/fr
j'ai je doit implementer un service qui devra :
- lancer une requtte http de type get
- récupérer le fichier xml
- le parser
- et afficher les données
mon code pour parser marche trés bien, et je pense que la requette est corrécte mais l'ensemble ne marche pas et je sais plus qoui faire
voici mon code :
try {
		           // Envoi de la requête
		           InputStream inputStream = sendRequest (new URL(URL));

		           // Vérification de l'inputStream
		           if(inputStream != null) {
		               // Lecture de l'inputStream dans un reader
		               InputStreamReader reader = new InputStreamReader(inputStream);

		               br = new BufferedReader(reader);
		               
		               String ligne = br.readLine();
		               
		               while (ligne != null){
			       			for (int i=0; i<= 74; i++) { 
			       				switch (i) {
			       				case 21 : {    //temperature du jour 
		       				           StringTokenizer st = new StringTokenizer(ligne, "<temperature></temperature>");
		       				           while (st.hasMoreTokens()) {
		       				        	 s=st.nextToken();
		       				        	 mot=st.nextToken();
					            		 s=st.nextToken();
					            		 Vtemperature = mot;
		       				           }}; break;
			       				}
			       				ligne = br.readLine();
				       		}	
					br.close();      //fin lecture
		               }
		           }
			       				
		           }

p.s : ce code je l'ai mit dans la methode OnStart() de mon service

dites moi s'il vous plait où est mon erreur c'est vraiment important.

5 réponses

BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
31 août 2013 à 19:53
Hello,
Quand tu dis que l'ensemble ne marche pas, ça veut dire quoi?
Ton service se lance? Ta requête part?
As-tu essayé de le lancer en debug, ou d'afficher des logs pour voir ce qui coince?
0
dslée jai oublié de mettre ma methode sendrequest() la voici :
private InputStream sendRequest (URL url) throws Exception {

        try {
            // Ouverture de la connexion
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

            // Connexion à l'URL
            urlConnection.connect();

            // Si le serveur nous répond avec un code OK
            if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                return urlConnection.getInputStream();
            }
        } catch (Exception e) {
            throw new Exception("");
        }
        return null;
    }

pour le service oui il se lance
et oui jai la permission internet
comme j vous l'ai dit :
mon parseur marche trés bien car j lai tésté sur un exemplaire (file.txt) su fichier xml que je cherche à télécharger, jai mis ce dernier sur le bureau
br = new BufferedReader(new FileReader("C:\\users\\XXXX\\desktop\\file.txt"));
aufait je me demande méme si c'est le fait d'utiliser une URI plutot qu'une URL ou c'est le fait de mettre mon code dans onStart() de mon service
enfait je suis complétement perdue
je vous prie de me donné quelques indications sur la marche à suivre
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
31 août 2013 à 20:24
Salut,

+1
Tu as les bonnes permissions ?

0
la seule permission c'est :
<uses-permission android:name="android.permission.INTERNET"/>
n'est ce pas???????????
0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
4 sept. 2013 à 11:36
Hello,
Je viens de tester le code suivant, il fonctionne:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(final Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    protected void onResume() {
        super.onResume();
        final Thread t = new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    final String url = "http://www.rp5.ru/xml/10288/00000/fr";
                    // Envoi de la requête
                    final InputStream inputStream = sendRequest(new URL(url));

                    // Vérification de l'inputStream
                    if (inputStream != null) {
                        // Lecture de l'inputStream dans un reader
                        final InputStreamReader reader = new InputStreamReader(inputStream);

                        final BufferedReader br = new BufferedReader(reader);

                        String ligne = br.readLine();

                        while (ligne != null) {
                            for (int i = 0; i <= 74; i++) {
                                switch (i) {
                                    case 21: { // temperature du jour
                                        final StringTokenizer st = new StringTokenizer(ligne, "<temperature></temperature>");
                                        while (st.hasMoreTokens()) {
                                            // s = st.nextToken();
                                            // mot = st.nextToken();
                                            // s = st.nextToken();
                                            // Vtemperature = mot;
                                        }
                                    }
                                        ;
                                        break;
                                }
                                ligne = br.readLine();
                            }
                            br.close(); // fin lecture
                        }
                    }

                } catch (final Exception e) {

                }

            }
        });
        t.start();
    }

    private InputStream sendRequest(final URL url) throws Exception {

        try {
            // Ouverture de la connexion
            final HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

            // Si le serveur nous répond avec un code OK
            if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                return urlConnection.getInputStream();
            }
        } catch (final Exception e) {
            throw new Exception("");
        }
        return null;
    }

} 

J'ai:
- commenté le code du parser
- modifier le code de sendRequest
- utiliser un thread pour ne pas faire la requête dans le Thread UI mais cela ne devrait pas t'impacter

Un conseil:
 catch (final Exception e) {
            throw new Exception("");
        }

A ne pas faire! OK, tu lances une exception, mais tu perds le message. Si exception il y a, il faut la traiter entièrement, ou ne pas la traiter ;)
0
bon je vais peut etre paraitre trop gourmande et je te remércie infiniment pour l'aide que tu m'apporte mais stp pourrait tu m'expliqué à quel endroit inserer ce code,
et stp pourquoi utiliser un menu???
en plus tu na pa récupéré la température tu à méme mit mon code en commentaire????!!!!
0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
4 sept. 2013 à 12:42
J'ai testé rapidement ce code dans une Activity. Ne t'occupes pas des onCreate(), menu,... Tu peux juste récupérer le code de sendRequest() car c'est ça qui devait te poser problème, ou alors je n'ai pas compris la question de départ...

en plus tu na pa récupéré la température tu à méme mit mon code en commentaire????!!!!
-> oui, je te l'ai dit ;) Tu nous as dit que le parser était bon, je n'ai donc pas vérifié...
0
par contre si je peux me permettre une question pour le service on insert le code dans onstart(), n'est ce pas ?? et puis je pense que ce n'est pas la peine de créer un autre thread dedans, je me trempe????
merci énormément
sincèrement obtenir de l'aide relevai du miracle alors merci
0

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

Posez votre question
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
4 sept. 2013 à 12:58
Je ne suis malheureusement pas un expert des Services.
Dans les exemples que j'ai sous les yeux, le code est mis dans le onCreate(). Sur ce tuto-ci également, mais ça ne devrait pas changer grand-chose.

Je pense qu'il n'est pas nécessaire d'utiliser les threads dans ton cas. Je l'avais fait dans mon exemple car on ne peut pas lancer de requête sur le thread UI.

sincèrement obtenir de l'aide relevai du miracle alors merci
-> oh...quand même... =)
0
aufait pour etre honnéete j nai implémenté qu'un seul service et il retourne bonjour, c'est fait dans oncreat() mai on peut changer sa valeur dans on start(),
par contre ya une différence :
c'est que si on a besoin de refaire appel au service plusieurs fois de suite par exemple toutes les 4h (comme dans mon cas) il faut ke les valeur soient changé dans onstart(), car au premier démarrage on fai appel à oncreat() puis onstart(), mais si on renouvelle l'appel ya que onstar() qui est appelée
petite précision : pour les version android (2.3.3 et plus) on utilise onStartCommand() au lieu de onstart()
0
merci bien
0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
4 sept. 2013 à 13:27
De rien!
Tiens-nous au courant. Et ton problème est résolu, merci d'indiquer cette demande en tant que "résolue"...
0
Rejoignez-nous