Aller au contenu

application qui marche quand elle veut


Recommended Posts

Bonjour,

J'ai un probleme avec ma premiere application : sur eclipse, elle marche super bien mais quand je met sur mon nexus one le .apk signe, l'appli se lance correctement mais des qu'elle essaye de changer d'activity ou quand elle essaye de faire une requete httpPost, elle plante (ne reponds plus)...

Merci d'avance pour votre aide.

Pour info voici le code de mon activity.java:

package com.Sportandlive;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;



public class Sportandlive extends Activity implements OnClickListener {

   Button connection = null;

   public static final int CODE_RETOUR = 0;

   @Override
   public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

   connection = (Button)findViewById(R.id.connection);
   // On spécifie que le le listener est notre classe
   connection.setOnClickListener(this);


   }

   @Override
   public void onClick(View v) {
       final EditText email = (EditText)findViewById(R.id.email);
       final EditText password = (EditText)findViewById(R.id.password);

   // Vérification de la vue cliquée

   if (v == connection) {
       if(email.getText().length() > 0) {
           if(password.getText().length() > 0) {

               HttpPost httppost = new HttpPost("http://dev-sportandlive.ialw.net/webservice/connect");

               List nameValuePairs = new ArrayList(); //On crée la liste qui contiendra tous nos paramètres

               //Et on y rajoute nos paramétres

               String md5Email = new Md5Convert().encode(email.getText().toString());


               nameValuePairs.add(new BasicNameValuePair("email", md5Email));
               nameValuePairs.add(new BasicNameValuePair("mdp", password.getText().toString()));

               //On lie la liste a l'instante httpPost
               try {
                   httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                   //ON envoie
                   HttpClient httpclient = new DefaultHttpClient();
                   //ON recupere la reponse
                   HttpResponse response;
                   try {
                       response = httpclient.execute(httppost);
                       //ON stocke la reponse
                       BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                       String s = reader.readLine();
                       Toast.makeText(Sportandlive.this, s, Toast.LENGTH_SHORT).show();
                       if (!(s.equals("false")))
                       {
                           Toast.makeText(Sportandlive.this, "fin", Toast.LENGTH_SHORT).show();

/*                            Intent monIntent = new Intent(this,Actu.class);
                           startActivity(monIntent);*/
                       }

                   } catch (ClientProtocolException e) {
                       // TODO Auto-generated catch block
                       e.printStackTrace();
                   } catch (IOException e) {
                       // TODO Auto-generated catch block
                       e.printStackTrace();
                   }

               } catch (UnsupportedEncodingException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
               }


           }
       }

   }
   }

   }

EDIT : J'ajoute que je developpe mon application sous froyo et que mon telephone est aussi sous froyo

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Sans analyser tout ton code, il y'a une chose qui me choque : ta requête HTTP n'est pas lancée dans une thread.

Tu lances ta requête dans la thread principale, c'est-à-dire celle de l'interface graphique. Or Android est conçu pour que dès que cette thread se bloque plus de 5 secondes, le système tue l'application afin d'éviter de bloquer l'utilisateur. Cela s'appelle l'ANR.

Ta requête doit prendre plus de temps sur ton N1 (3G ?) que sur ton émulateur (LAN), d'où la différence.

La moyen le plus simple pour implémenter ce type de comportement est d'utiliser la classe AsyncTask.

Bon courage,

ichpa

Lien vers le commentaire
Partager sur d’autres sites

Apres plusieurs essais infructueux, je suis arrive a ce resultat, pas tres satisfaisant puisque qu'il ne fait rien mais au moins il ne plante pas :) Si quelqu'un pouvait m'indiquer ou se situent mes erreurs ce serrait super sympa !

Merci !

voici le meme fichier, ou j'y inclus cette fois un AsyncTask (sans parametres car je n'ai pas compris a quoi ils servent, et en plus je n'ai pas de paramettres a passer) :

package com.Sportandlive;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;



public class Sportandlive extends Activity implements OnClickListener {

   Button connection = null;



   @Override
   public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

   connection = (Button)findViewById(R.id.connection);
   // On spécifie que le le listener est notre classe
   connection.setOnClickListener(this);


   }


    private class DownloadFilesTask extends AsyncTask {
        String s;
        protected Long doInBackground() {
            HttpPost httppost = new HttpPost("http://dev-sportandlive.ialw.net/webservice/connect");

               List nameValuePairs = new ArrayList(); //On crée la liste qui contiendra tous nos paramètres

               //Et on y rajoute nos paramétres

               String md5Email = new Md5Convert().encode("coucou");


               nameValuePairs.add(new BasicNameValuePair("email", md5Email));
               nameValuePairs.add(new BasicNameValuePair("mdp", "b"));

               //On lie la liste a l'instante httpPost
               try {
                   httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                   //ON envoie
                   HttpClient httpclient = new DefaultHttpClient();
                   //ON recupere la reponse
                   HttpResponse response;
                   try {
                       response = httpclient.execute(httppost);
                       //ON stocke la reponse
                       BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                        s = reader.readLine();


                   } catch (ClientProtocolException e) {
                       // TODO Auto-generated catch block
                       e.printStackTrace();
                   } catch (IOException e) {
                       // TODO Auto-generated catch block
                       e.printStackTrace();
                   }

               } catch (UnsupportedEncodingException e) {
                   // TODO Auto-generated catch block
                   e.printStackTrace();
               }
            return null;
        }

        protected void onPostExecute() {
               if (!(s.equals("false")))
               {
               Toast.makeText(Sportandlive.this, s, Toast.LENGTH_SHORT).show();
               Intent monIntent = new Intent(Sportandlive.this,Actu.class);
               startActivity(monIntent);
               }

        }


       @Override
       protected Object doInBackground(Object... params) {
           // TODO Auto-generated method stub
           return null;
       }
    }

   @Override
   public void onClick(View v) {
       final EditText email = (EditText)findViewById(R.id.email);
       final EditText password = (EditText)findViewById(R.id.password);

   // Vérification de la vue cliquée

   if (v == connection) {
       if(email.getText().length() > 0) {
           if(password.getText().length() > 0) {

                new DownloadFilesTask().execute();

           }
       }

   }
   }


   }




Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...