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 :

Problème données JSON Object


Sujet :

Android

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 26
    Par défaut Problème données JSON Object
    Bonjour,

    Je récupère des données d'une base de données pour une authentification de compte. Mais si j'ai plusieurs clients dans ma liste, les tests ne s'effectuent que pour le dernier.

    J'aimerai récupérer uniquement la ligne correspondant à l'adresse email entrée dans l'editText correspondant.

    Le code vous donnera peut-être une idée plus claire de mon problème :

    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
    private class JSONParse extends AsyncTask<String, String, JSONArray> {
    		    private ProgressDialog pDialog;
    		    @Override
    		    protected void onPreExecute() {
    		            super.onPreExecute();			         
    		    	}
     
    		    	@Override
    		        protected JSONArray doInBackground(String... args) {
     
    		    		JSONParser jParser = new JSONParser();
    		    		// Getting JSON from URL
    		    		JSONArray json = jParser.getJSONFromUrl(urlauthentification);
    		    		return json;	
    		    	}
    		    	 @Override
    		         protected void onPostExecute(JSONArray json) {
    		    		 try {
     
    		    				// On récupère le tableau JSON de l'URL
    		    				for(int i = 0; i < json.length(); i++){
    		    				JSONObject c = json.getJSONObject(i);   			
    		    				// On stocke les valeurs JSON dans une variable
    		    				prenom = c.getString(TAG_PRENOM);
    		    				Cemail = c.getString(TAG_EMAIL);
    		    				password = c.getString(TAG_PASS);
     
    		    				Connexion.setOnClickListener(new OnClickListener() {
    	......

    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
     
     
    public class JSONParser {
     
    	static InputStream is = null;
    	static JSONArray jObj = null;
    	static String json = "";
     
    	// constructor
    	public JSONParser() {
     
    	}
     
    	public JSONArray getJSONFromUrl(String url) {
     
    		// Making HTTP request
    		try {
    			// defaultHttpClient
    			DefaultHttpClient httpClient = new DefaultHttpClient();
    			HttpPost httpPost = new HttpPost(url);
     
    			HttpResponse httpResponse = httpClient.execute(httpPost);
    			HttpEntity httpEntity = httpResponse.getEntity();
    			is = httpEntity.getContent();			
     
    		} catch (UnsupportedEncodingException e) {
    			e.printStackTrace();
    		} catch (ClientProtocolException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
    		try {
    			BufferedReader reader = new BufferedReader(new InputStreamReader(
    					is, "iso-8859-1"), 8);
    			StringBuilder sb = new StringBuilder();
    			String line = null;
    			while ((line = reader.readLine()) != null) {
    				sb.append(line + "\n");
    			}
    			is.close();
    			json = sb.toString();
    		} catch (Exception e) {
    			Log.e("Buffer Error", "Error converting result " + e.toString());
    		}
     
    		// try parse the string to a JSON object
    		try {
    			jObj = new JSONArray(json);
    		} catch (JSONException e) {
    			Log.e("JSON Parser", "Error parsing data " + e.toString());
    		}
     
    		// return JSON String
    		return jObj;
     
    	}
    }
    J'ai essayé dans ma requête SQL de ne récupérer que les informations d'un client selon l'adresse email présent dans un EditText

    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
    <?php
     
    include ('JSON.php');
     
         // create a new instance of Services_JSON
          $json = new Services_JSON();
     
    	  mysql_connect("sql.free.fr","xxxxx","xxxxxx");
     
    	  mysql_select_db("xxxxx");
    	  $sql=mysql_query("select Prenom,Email,Pass from tclient WHERE Email like '".$_REQUEST['Email']."%'");
     
    	  while($row=mysql_fetch_assoc($sql)) 
     
    	  $output[] = ($row); 
     
    	  echo $json->encode($output); 
     
    	  mysql_close();
    ?>
    J'ai essayé différentes boucle while mais sans résultat.

  2. #2
    Membre actif
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Par défaut
    Salut,

    Je pense que ca vient de ton WHILE coté PHP.
    Vérifie ton fichier JSON, il doit contenir un seul enregistrement.

    EDIT :

    Le code PHP :
    - il faut mettre les {} autours de ton code du WHILE.

    - attention à ton direct dans la requete SQL, c'est une belle porte d'entrée pour une injection SQL.

    - Je ne sais pas quelle version de PHP free utilise mais mysql_ est depréciée, il faudrait utiliser mysqli_ si tu peux.

    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
    <?php
    	include ('JSON.php');
     
    	// create a new instance of Services_JSON
    	$json = new Services_JSON();
     
    	$connexion_mysqli=mysqli_connect("sql.free.fr","root","password","db");
     
    	$sql="SELECT Prenom,Email,Pass FROM tclient WHERE Email LIKE '".$_REQUEST['Email']."%'";
     
    	$result=mysqli_query($connexion_mysqli,$sql);
     
    	while($row=mysql_fetch_assoc($result)){
    		$output[] = ($row);
    		echo $json->encode($output); 
    	}
    	mysqli_close($connexion_mysqli);
    ?>

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 26
    Par défaut
    Ca fonctionne très bien avec mysql mais je pense que le problème vient du fait de comment le php sait ce qu'il y a dans '".$_REQUEST['Email']."%'".
    Car lorsque j'utilisais cette syntaxe, c'était pour insérer des données. Et pour cela j'utilise :

    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
    class GetServerDataTask extends AsyncTask<String,String,JSONArray> {
     
    	private ProgressDialog pDialog;
     
     /** Appelée dans le thread principal (on a donc le droit de toucher à l'UI) avant le démarrage */
    			public void onPreExecute() {
     
    			}
     
    		            /** Appelée dans un thread à part, recoit les mêmes paramètres que ceux passés à "execute()" 
                                 * @return */
    		            public JSONArray doInBackground(String ... urls)
    		            {
    				// Envoie de la commande http
    				try{
    		 		        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    				        nameValuePairs.add(new BasicNameValuePair("Nom", Nom.getText().toString()));
    				        nameValuePairs.add(new BasicNameValuePair("Prenom", Prenom.getText().toString()));
    				        nameValuePairs.add(new BasicNameValuePair("Ville", Ville.getText().toString()));
    				        nameValuePairs.add(new BasicNameValuePair("Code postal", Code_postal.getText().toString()));
    				        nameValuePairs.add(new BasicNameValuePair("Adresse", Adresse.getText().toString()));
    				        nameValuePairs.add(new BasicNameValuePair("Email", Email.getText().toString()));
    				        nameValuePairs.add(new BasicNameValuePair("Pass", Pass.getText().toString()));
     
    					HttpClient httpclient = new DefaultHttpClient();
    					HttpPost httppost = new HttpPost(URL2);
    					httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
     
    					HttpResponse response = httpclient.execute(httppost);
    					HttpEntity entity = response.getEntity();
     
    		                        //String entityStr = EntityUtils.toString(entity);
     
    		                        //return new JSONArray(entityStr);
     
    				}catch(Exception e){
    					Log.e("GetServerDataTask", "Erreur de récupération des données",e);
    				}
    		                return null;
    		            }
     
    		            /**
                                 * Appelé dans le thread UI, avec le retour de doInBackground. On peut donc modifier l'UI ici.
                                 */
    		            public void onPostExecute(JSONArray result) {
    Donc je n'utilise pas la classe JSONParsER pour envoyer des données.

    Dois-je modifier ma classe JSONParsE pour récupérer les données spécialement dans ce cas la ou si je créée une variable du genre :
    String Email = Email.getText().toString();

    Le php saura qu'il faut récupérer dans la base de donnée la ligne où l'adresse email correspond à ce champ.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Décembre 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 26
    Par défaut
    Résolu, le code pour les intéressés :

    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
    class GetServerDataTask extends AsyncTask<String,String,JSONArray> {
    		InputStream is = null;
            String result = "";
        	JSONArray jObj = null;
     
    	 /** Appelée dans le thread principal (on a donc le droit de toucher à l'UI) avant le démarrage */
    				public void onPreExecute() {
     
    				}
     
    			            /** Appelée dans un thread à part, recoit les mêmes paramètres que ceux passés à "execute()" 
                                         * @return */
    			            public JSONArray doInBackground(String ... urls)
    			            {
    					// Envoie de la commande http
    					try{
    			 		    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    					    nameValuePairs.add(new BasicNameValuePair("email", Email.getText().toString()));
     
    						HttpClient httpclient = new DefaultHttpClient();
    						HttpPost httppost = new HttpPost(urlauthentification);
    						httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
     
    						HttpResponse response = httpclient.execute(httppost);
    						HttpEntity entity = response.getEntity();
    						is = entity.getContent();	
     
     
    			            }catch(Exception e){
    						Log.e("GetServerDataTask", "Erreur de récupération des données",e);
    			            }
     
    					try {
    						BufferedReader reader = new BufferedReader(new InputStreamReader(
    								is, "iso-8859-1"), 8);
    						StringBuilder sb = new StringBuilder();
    						String line = null;
    						while ((line = reader.readLine()) != null) {
    							sb.append(line + "\n");
    						}
    						is.close();
    						result = sb.toString();
    					} catch (Exception e) {
    						Log.e("Buffer Error", "Error converting result " + e.toString());
    					}
     
    					try {
    						jObj = new JSONArray(result);
    					} catch (JSONException e) {
    						Log.e("JSON Parser", "Error parsing data " + e.toString());
    					}
     
    					// return JSON String
    					return jObj;
     
    			            }
     
    			            /**
                                         * Appelé dans le thread UI, avec le retour de doInBackground. On peut donc modifier l'UI ici.
                                         */
    			            protected void onPostExecute(JSONArray jObj) {
    			            	try {
    			            	for (int i = 0; i < jObj.length(); i++) {
    					            JSONObject c = jObj.getJSONObject(i);
    					            prenom = c.getString(TAG_PRENOM);
    					    		Cemail = c.getString(TAG_EMAIL);
    					    		password = c.getString(TAG_PASS);
    						            }
    								} catch (JSONException e) {
    									// TODO Auto-generated catch block
    									e.printStackTrace();
    								}
     
    ........

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d’ajouter des données JSON dans une ListView
    Par amirmejrii dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 05/03/2012, 21h43
  2. Problème linq to object
    Par Fayoul dans le forum Linq
    Réponses: 2
    Dernier message: 19/03/2008, 21h53
  3. [Problème] Vertex Buffer Object
    Par Soznor dans le forum OpenGL
    Réponses: 20
    Dernier message: 19/07/2007, 18h44
  4. problème de cast object
    Par root76 dans le forum Langage
    Réponses: 14
    Dernier message: 12/04/2007, 13h42
  5. Problème avec xmlHttp object
    Par warmup27 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/04/2007, 19h16

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