Morgan26 Posté(e) 9 septembre 2010 Share Posté(e) 9 septembre 2010 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 More sharing options...
ichpa Posté(e) 9 septembre 2010 Share Posté(e) 9 septembre 2010 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 More sharing options...
Morgan26 Posté(e) 9 septembre 2010 Auteur Share Posté(e) 9 septembre 2010 Ok merci beaucoup je vais tacher d'essayer d'appliquer ce que tu m'as dit Lien vers le commentaire Partager sur d’autres sites More sharing options...
Morgan26 Posté(e) 9 septembre 2010 Auteur Share Posté(e) 9 septembre 2010 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 More sharing options...
Azathot Posté(e) 9 septembre 2010 Share Posté(e) 9 septembre 2010 En revanche, tu aurais pu poster dans la catégorie "développement". Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.