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 :

[JSON] Erreur "Error Parsing Data"


Sujet :

Android

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 52
    Par défaut [JSON] Erreur "Error Parsing Data"
    Bonjour,

    Lors de la récupération des données d'un base MySQL avec JSON, j'obtiens ce message d'erreur :
    E/JSON Parser(1130): Error parsing data org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject
    Je pense que le problème est dans le résultat retourné par PHP car dans mon exemple je fais le retour d'un tableau qui sera parsé par JSON.

    Voici le code PHP :
    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
    $response["products"] = array();
    while ($row = mysql_fetch_array($result)) {
    // temp user array
    $product = array();
    $product["pid"] = $row["pid"];
    $product["des"] = $row["des"];
    $product["pri_uni"] = $row["pri_uni"];
    $product["created_at"] = $row["created_at"];
    $product["updated_at"] = $row["updated_at"];
    // push single product into final response array
    array_push($response["products"], $product);
    }
    // success
    $response["success"] = 1;
    // echoing JSON response
    echo json_encode($response);
    } else {
    // no products found
    $response["success"] = 0;
    $response["message"] = "No products found";
    // echo no users JSON
    echo json_encode($response);
    Quelqu'un saurait-il m'indiquer d'où vient le problème ?

    Merci d'avance pour votre aide.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Cela vient d'une erreur liée à PHP.

    Peut tu afficher la réponse HTTP depuis le code Android avec un Log.i(), juste avant de le parser.

  3. #3
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    Vu le texte qui accompagne l'exception: "Value <br "
    Je pense à un retour HTML....

    Exception du PHP ?

    Comme dit simonmarky, un logcat complet, avec une trace du JSON en chaine serait la bienvenue...

  4. #4
    Membre très actif
    Homme Profil pro
    Ingénieur Informatique et Développeur Android
    Inscrit en
    Janvier 2010
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur Informatique et Développeur Android

    Informations forums :
    Inscription : Janvier 2010
    Messages : 384
    Par défaut
    tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "json_encode(resultat_requete)" ;

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 52
    Par défaut
    Citation Envoyé par Simonmarky Voir le message
    Cela vient d'une erreur liée à PHP.

    Peut tu afficher la réponse HTTP depuis le code Android avec un Log.i(), juste avant de le parser.
    oui en faisaint "log.i(pid.tostring)" j'obtiens le vrai "pid" de l'élément choisi dans la listView mais il ne passe pas au code PHP !!

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Non, tu a mal compris ma question.

    Tu effectue une requete PHP vers un serveur. Ce serveur te retourne un erreur, peux tu l'afficher entièrement.

    Dans ton code java, juste avant de faire new JSONObject(str); écris ceci Log.e("",str);

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 52
    Par défaut
    Citation Envoyé par tlili_info Voir le message
    tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "json_encode(resultat_requete)" ;
    Je pense que le résultat de la requête est déjà dans la variable $response n'est ce pas ?

  8. #8
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 52
    Par défaut
    Citation Envoyé par Simonmarky Voir le message
    Non, tu a mal compris ma question.

    Tu effectue une requete PHP vers un serveur. Ce serveur te retourne un erreur, peux tu l'afficher entièrement.

    Dans ton code java, juste avant de faire new JSONObject(str); écris ceci Log.e("",str);
    Désolé fréro je suis pas vraiment Pro ... je te donne le bout de code et si vous pouvez me dire quoi et ou je dois écrire Log.e() !

    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
    protected String doInBackground(String... params) {
     
    			// updating UI from Background Thread
    			runOnUiThread(new Runnable() {
    				public void run() {
    					// Check for success tag
    					int success;
    					try {
    						// Building Parameters
    						List<NameValuePair> params = new ArrayList<NameValuePair>();
    						params.add(new BasicNameValuePair("pid", pid));
     
    						// getting product details by making HTTP request
    						// Note that product details url will use GET request
    						JSONObject json = jsonParser.makeHttpRequest(
    								url_product_detials, "GET", params);
     
    						// check your log for json response
    						Log.d("Single Product Details", json.toString());
     
    						// json success tag
    						success = json.getInt(TAG_SUCCESS);
    						if (success == 1) {
    							// successfully received product details
    							JSONArray productObj = json
    									.getJSONArray(TAG_PRODUCT); // JSON Array
     
    							// get first product object from JSON Array
    							JSONObject product = productObj.getJSONObject(0);
     
    							// product with this pid found
    							// Edit Text
    							txtName = (EditText) findViewById(R.id.inputName);
    							txtPrice = (EditText) findViewById(R.id.inputPrice);
    							txtDesc = (EditText) findViewById(R.id.inputDesc);
     
    							// display product data in EditText
    							txtName.setText(product.getString(TAG_NAME));
    							txtPrice.setText(product.getString(TAG_PRICE));
    							txtDesc.setText(product.getString(TAG_DESCRIPTION));
     
    						}else{
    							// product with pid not found
    						}
    					} catch (JSONException e) {
    						e.printStackTrace();
    					}
    				}
    			});
     
    			return null;
    		}

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    On va faire simple :
    Ouvre ton navigateur (sur ton ordinateur) et écrit l'URL de la requete (avec les paramètres)

    exemple : www.ton-site.com/ta-page.php?pid=xxx

  10. #10
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 52
    Par défaut
    Merci bien fréro .. c'est bon maintenant ! mais j'ai un autre soucis :/
    j'ai 3 champs (EditText) .. le 1er c'est le "prix unitaure", le 2eme c'est "la quantité demandée" et le 3eme c'est "le prix totale" .. comment faire pour calculer la valeur du 3eme champs suivant la formule : pri_tot = qte_dem * pri_uni ? .. sachant que le calcul de ce champs doit se faire dés que je tape la quantité demandée

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Par défaut
    Tu peux utiliser un TextWatcher, qui va te permettre de détecter tout changement dans un EditText.
    Ensuite tout pourra calculer et modifier la valeur du 3ème EditText

  12. #12
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 52
    Par défaut
    Citation Envoyé par Simon MARQUIS Voir le message
    Tu peux utiliser un TextWatcher, qui va te permettre de détecter tout changement dans un EditText.
    Ensuite tout pourra calculer et modifier la valeur du 3ème EditText
    c'est intéressant ce TextWatcher .. mais dans la plupart des Tuto que j'ai trouvé , afterTextChanged() est inséré aprés onCreate () or dans ma classe je fais la même chose mais sa génére une erreur :
    void is an invalid type for the variable afterTextChanged

  13. #13
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    Ca génère une erreur ? ou ça ne compile pas ?
    Quelle erreur ?

    Sans regarder de tutorial, la doc de TextWatcher est assez explicite...
    before, on, after....

  14. #14
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 52
    Par défaut
    c'est bon maintenant .. j'ai trouvé l'erreur !! après avoir ajouter implements TextWatcher les 3 blocs : afterTextChanged(), beforeTextChanged() et onTextChanged() s'ajoutent automatiquement or je l'ai pas remarqué donc il y a eu une redondance

Discussions similaires

  1. [Mapping] [Hibernate3 - MySQL] Erreur récurrente "Error parsing XML"
    Par KosenHitatchi dans le forum Hibernate
    Réponses: 0
    Dernier message: 07/04/2013, 17h39
  2. [PHP-JS] Erreur de type : Parse Error
    Par calitom dans le forum Langage
    Réponses: 6
    Dernier message: 19/07/2006, 23h10
  3. [MySQL] Supprimer les erreurs de syntaxe dues aux quotes
    Par gotenks dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/01/2006, 16h10

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