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 :

Convertir Json en objet


Sujet :

Android

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 21
    Points
    21
    Par défaut Convertir Json en objet
    Bonjour à tous,
    Je développe une application Android qui interroge une base de donnée MySQL, j'ai donc fait un web service qui renvoi les réponses au format json grâce à vos bons conseils.

    Le Json ressemble à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ["Concours DEsign","D\u00e9roulement des \u00e9preuves","Test BLoc"]
    J'ai une classe qui recupère le Json et le convertit en Objet UnArticle :
    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
     
    package com.example.myipsa;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    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 com.google.gson.Gson;
    import android.util.Log;
     
    public class ServerAccess {
     
    	private Gson gson;
     
    	//Convert an inputstream to a string
    	public static String convertStreamToString(InputStream is)
        {
        	BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        	StringBuilder sb = new StringBuilder();
     
        	String line = null;
        	try {
        		while ((line = reader.readLine()) != null) {
        			sb.append(line + "\n");
        		}
        	}
        	catch (IOException e) {
        		Log.e("PHP Client","Error : "+e.getMessage());
        	}
        	finally {
        		try {
        			is.close();
        		} catch (IOException e1) {
        			Log.e("PHP Client","Error : "+e1.getMessage());
        		}
        	}
        	return sb.toString();
        }
     
    	//Get the response form the server as an object
    	public Object getResponseObject(ArrayList Parameters,Class c)
    	{
    		try{
    			//Create a HTTP Client
    			HttpClient httpclient = new DefaultHttpClient();
     
    			//Create and object to Post values to the server
    			//The url is specified in the Constants class to increase modifiability
    			HttpPost httppost = new HttpPost(Constants.SERVICE_URL);
     
    			//Set the attributes to be posted as Parameters
    			httppost.setEntity(new UrlEncodedFormEntity(Parameters));
     
    			//Execute the post and get the response
    			HttpResponse response = httpclient.execute(httppost);
     
    			//Get the response as ans entity
    			HttpEntity entity = response.getEntity();
     
    			//Get the content of the response as a stream
    			InputStream stream=entity.getContent();
     
    			//Convert the stream to a GSON object
    	        String result= convertStreamToString(stream);
    	        //Log.e("MyIPSA", result); 
     
    	        gson = new Gson();
    	        //Convert the respose string to a object of the given type
    	        //Here Object class is used so that we can use the same method to get any
    	        //class's object as response
    			Object responseObject=gson.fromJson(result, c);
    			//Return the object
    	        return responseObject;
    		}catch(Exception e){
    			Log.e("MyIPSA", "Error in http connection"+e.toString());
    			return null;
    		}
    	}
     
     
    	//Get the employees
    	public UnArticle[] getTitreArticle()
    	{
    		//Create the arraylist to set the parameters of the post
    		ArrayList<BasicNameValuePair> parameters=new ArrayList<BasicNameValuePair>();
    		//Set the method name
    		parameters.add(new BasicNameValuePair("method","getTitreArticle"));
     
    		//Get the array as the result
    		UnArticle[] o= (UnArticle[])getResponseObject(parameters,UnArticle[].class);
    		return o;
    	}
    }
    Ma classe UnArticle est celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    package com.example.myipsa;
     
    public class UnArticle {
    	public String nom;
    }
    Mais la fonction "gson.fromJson(result, c)" me renvoi un :
    Expected BEGIN_OBJECT but was STRING

    Alors que si j'ai bien compris elle est censé prendre un string en entré et donnée un objet en sortit.

    Merci d'avance pour votre aide précieuse

  2. #2
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 108
    Points : 163
    Points
    163
    Par défaut
    Bonjour,

    êtes vous sur d'établir la connexion ?

    si vous êtes en local, utilisez vous : 10.0.2.2 (à la place du fameux 127.0.0.1)

    Essayer d'abord de lire le flux et de l'afficher dans les logs.

    Cordialement, Raphael.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 21
    Points
    21
    Par défaut
    Ce n'est pas en local mais sur un serveur distant.
    Je suis sur que la connexion ce fait correctement et que les données sont bien récupérer puisque la variable result me renvoi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ["Concours DEsign","D\u00e9roulement des \u00e9preuves","Test BLoc"]
    Le problème vient de la ligne gson.fromJson(result, c);

    Merci pour la réponse

  4. #4
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 108
    Points : 163
    Points
    163
    Par défaut
    Bonjour,

    normalement, le format json est comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    {
      "fruits": [
        { "kiwis": 3,
          "mangues": 4,
          "pommes": null
        },
        { "panier": true },
      ],
      "legumes":
        { "patates": "amandine",
          "figues": "de barbarie",
          "poireaux": false
        }
    }
    .



  5. #5
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 108
    Points : 163
    Points
    163
    Par défaut
    Je vous renvois vers la doc de GSON :

    ICI

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 21
    Points
    21
    Par défaut
    Merci pour les réponses.
    Sa vient donc peut être de mon web service.
    Il est fait comme ceci :

    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
     
     $query="select nom from ressource_article where id_cat=36";
      $result = mysql_query($query);
      $rowcount= mysql_num_rows($result);
      //if the count is 0 then no matching rows are found
      if($rowcount==0)
      {
      	echo json_encode(array('result'=>0));
      }
      else {
        while ($row = mysql_fetch_assoc($result)) {
           $tableau[] = $row['nom'];
        }
        	//Get and return
        	echo json_encode($tableau);
      }

  7. #7
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2010
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 108
    Points : 163
    Points
    163
    Par défaut
    essayez ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $query="select nom from ressource_article where id_cat=36";
      $result = mysql_query($query);
      $rowcount= mysql_num_rows($result);
      //if the count is 0 then no matching rows are found
      if($rowcount==0)
      {
      	echo json_encode(array('result'=>0));
      }
      else {
    while($row=mysql_fetch_assoc($result))
    				{$output[]=$row;}
    			print(json_encode($output));
        }

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 21
    Points
    21
    Par défaut
    C'était donc ça !
    Merci bien problème résolu !

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

Discussions similaires

  1. Convertir JSON en objet Java
    Par poussinvert dans le forum Android
    Réponses: 1
    Dernier message: 28/05/2013, 16h19
  2. Convertir JSON en .CSV
    Par Gaetch dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 07/06/2012, 13h35
  3. Réponses: 2
    Dernier message: 03/05/2012, 20h35
  4. convertir void en objet
    Par infose dans le forum C#
    Réponses: 4
    Dernier message: 18/10/2010, 10h26
  5. [POO] json et objet javascript
    Par kimcharlene dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/05/2008, 23h10

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