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

API standards et tierces Android Discussion :

Authentification d'un client Android auprès d'un serveur web


Sujet :

API standards et tierces Android

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Authentification d'un client Android auprès d'un serveur web
    Bonjour,

    Je développent une application sous android, parmi les fonctionnalité: l'authentification

    Donc j'envoie une requête HttpPost qui va transmettre le login et le mot de passe au serveur. ces derniers vont être vérifiés auprès d'une base de données. Cette vérification c'est la servlet(mon url de la requête) qui va la faire. j'envoie la requête et normalement je dois recevoir une réponse que je la récupère dans inputstream. après je crée un bufferedReader qui va stocker cette réponse dans un string. sauf que quand je débug, ça s'arrête dans la ligne où je récupère la réponse dans inputstream.

    Quelqu'un peut m'aider svp.

    Merci bcp

    Voilà le 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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    package com.android.authentification;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.List;
     
    import org.apache.http.HttpEntity;
    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.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.params.HttpConnectionParams;
    import org.apache.http.protocol.HTTP;
     
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Looper;
    import android.util.Log;
    import android.view.View;
    import android.webkit.WebView;
    import android.widget.Button;
    import android.widget.EditText;
     
    public class AuthentificationActivity extends Activity {
     
    	private StringBuffer stringBuffer = new StringBuffer("");
    	private BufferedReader bufferedReader  = null ;
     
    	private static final String url = "http://192.168.5.29:8080/testWeb/servlet.AuthentificationServlet";
     
    	public static ProgressDialog progressDialog;
     
    	private EditText UserEditText;
    	private EditText PassEditText;
     
    	private static final String LOG_TAG = "Log : ";
    	private final String mimeType = "text/html";
    	private final String encoding = "utf-8";
    	private String pageWeb; 
    	private WebView webView;
     
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
     
    		//initialisation de la progress bar
    		progressDialog = new ProgressDialog(this);
    		progressDialog.setMessage("Attendez...");
    		progressDialog.setIndeterminate(true);
    		progressDialog.setCancelable(false);
     
    		webView = (WebView) findViewById(R.id.WebView);
     
    		// Récupération des éléments de la vue définis dans le xml
    		UserEditText = (EditText)findViewById(R.id.username);
    		PassEditText = (EditText)findViewById(R.id.password);
     
    		Button button =(Button)findViewById(R.id.okbutton);
    		button.setOnClickListener(new View.OnClickListener() {
    			public void onClick(View v) {
     
    				//				new Thread(){
    				//					public void run(){
    				int usersize = UserEditText.getText().length();
    				int passsize = PassEditText.getText().length();
     
    				//si les deux champs sont remplis
    				if(usersize>0 && passsize>0)
    				{
    					progressDialog.show();
     
    					String login = UserEditText.getText().toString();
    					String pass = PassEditText.getText().toString();
     
    					//on appelle la fonction dologin qui va communiquer av le serveur
    					try {
    						pageWeb = doLogin(login,pass);
    					} catch (ClientProtocolException e) {
    						e.printStackTrace();
    					} catch (IOException e) {
    						e.printStackTrace();
    					}
    					webView.getSettings().setJavaScriptEnabled(true);
    					webView.loadDataWithBaseURL("fake://not/needed", pageWeb, mimeType, encoding, "");
    					webView.getSettings().setJavaScriptEnabled(true);
    				}
    				else
    					createDialog("Erreur","Entrez votre login et mot de passe");
    			}
    			//}.start();
    		}//}
    				);
     
    		//le bouton cancel pour sortir de l'application
    		Button button1 =(Button)findViewById(R.id.cancelbutton);
    		button1.setOnClickListener(new View.OnClickListener() {
    			public void onClick(View v) {
    				quit(false,null);	
    			}
    		}); 
     
    	}//create
     
    	//---------------------------------------------------------------------------------------------------------------
     
    	private void quit(boolean b, Intent i) {
    		//on envoie un résultat qui va permettre de quitter l'application
    		setResult((b)? Activity.RESULT_OK : Activity.RESULT_CANCELED, i);
    		finish();
    	}
     
    	//---------------------------------------------------------------------------------------------------------------
     
    	private void createDialog(String title, String text) {
    		AlertDialog ad = new AlertDialog.Builder(this)
    		.setPositiveButton("OK", null).setTitle(title).setMessage(text)
    		.create();
    		ad.show();
    	}
    	//---------------------------------------------------------------------------------------------------------------
     
    	private String doLogin(final String login, final String pass)throws ClientProtocolException, IOException {
     
    		Thread t = new Thread(){
    			public void run(){
    				Looper.prepare();					
    				try{
     
    					//on se connecte au serveur afin d'envoyer le login et le passwd
    					HttpClient client = new DefaultHttpClient();
    					HttpConnectionParams.setConnectionTimeout(client.getParams(), 15000);
     
    					//la requete qui envoie les paramètres
    					HttpPost post = new HttpPost(url);
     
    					//on crée la liste qui contient les paramètres
    					List<NameValuePair> nvps = new ArrayList<NameValuePair>();
    					//on rajoute les paramètres à la liste
    					nvps.add(new BasicNameValuePair("username", login));
    					nvps.add(new BasicNameValuePair("password", pass));
     
    					post.setHeader("Content-Type", "application/x-www-form-urlencoded");
     
    					//joindre les paramètre à la requete
    					post.setEntity(new UrlEncodedFormEntity(nvps));
     
    					//Execution du client HTTP avec le HttpPost
    					HttpResponse response = client.execute(post);
     
    					//On récupère la réponse dans un InputStream
    					InputStream is = response.getEntity().getContent();
    					Log.d("myapp", "response " + response.getEntity().getContent());
     
    					//On crée un bufferedReader pour pouvoir stocker le résultat dans un string
    					bufferedReader  = new BufferedReader(new InputStreamReader(is));
     
    					//On lit ligne à ligne le bufferedReader pour le stocker dans le stringBuffer
    					String ligneCodeHTML = bufferedReader.readLine();
    					while (ligneCodeHTML != null){
    						stringBuffer.append(ligneCodeHTML);
    						stringBuffer.append("\n");
    						ligneCodeHTML = bufferedReader.readLine();
    					}  
    				}
    				catch (Exception e) 
    				{ 
    					progressDialog.dismiss();
    					createDialog("Erreur", "impossible d'établir la connexion");
    				}
    				Looper.loop();	
    			}		
    		};
    		t.start();
    		return stringBuffer.toString();
    	}
    }//classe

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Salut,

    In nous faudrait les exceptions précises pour bien t'aider.
    Je te conseille la lecture de cet article dans un premier temps, il va t'aider à localiser l'erreur :
    http://nbenbourahla.developpez.com/t...s-application/
    Une fois l'erreur localiser une simple recherche google devrait résoudre ton problème.
    Là en voyant ce que tu essaye de faire, sans regarder ton code dans le détail, je pense à plusieurs problèmes potentiels :
    - tu n'as pas mis la permission internet
    - tu n'as pas accès à internet depuis ton terminal (émulateur ou vrai périphérique)
    - tu utilises la mauvaise url pour accéder à ton serveur (local ?)
    - tu as un problème de parsing de la réponse
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Effectivement j'avais pas vu le contenu de l'exception.
    donc maintenant je l'ai vérifié. ça m'envoie ça "Content has been consumed"

    du coup j'ai commenté cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.d("myapp", "response " + response.getEntity().getContent());
    maintenant ça marche, ça me retourne bien le résultat de la servlet, sauf que ça affiche rien dans la WebView

  4. #4
    Expert éminent

    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
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Juste au passage:

    EntityUtils.toString(response.getEntity())

    c'est quand même plus pratique pour transformer en string (surtout que ça gère tous les types d'encodings)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. Transfert d'une image depuis un client Android distant vers un serveur
    Par HoussemBk dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 24/03/2015, 00h12
  2. Réponses: 2
    Dernier message: 27/11/2014, 17h40
  3. IDEDroid : Client Android pour le compilateur en ligne ideone.com
    Par forum dans le forum Outils à télécharger
    Réponses: 0
    Dernier message: 21/05/2011, 12h00
  4. Réponses: 9
    Dernier message: 11/04/2011, 12h15
  5. Réponses: 1
    Dernier message: 25/08/2009, 19h22

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