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 :

affichage des données provenant d'un ws


Sujet :

Android

  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2011
    Messages : 64
    Points : 52
    Points
    52
    Par défaut affichage des données provenant d'un ws
    bonsoir à tous ,
    j'ai élaboré un web service quipasse des données depuis une base de données distante au client android.L'affichage des données est fait sur le logcat pour tester.Je veux faire un affichage des données dans listeview mais j'ai un problème car dans la récupération des données j'ai utilisé un thread
    est ce que quelqu'un peut m'aider
    merci d'avance

  2. #2
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Bonjour,

    Il nous faudrait le code que tu as mis en place pour pouvoir t'aider.
    Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

    F.A.Q. : Java, PHP, (X)HTML / CSS

    N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 44
    Points : 76
    Points
    76
    Par défaut
    Coucou,
    Utilise la classe AsyncTask fournit par l'api.
    Elle permet de créer un Thread puis de recevoir le résultat dans le UIThread.

  4. #4
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2011
    Messages : 64
    Points : 52
    Points
    52
    Par défaut
    voici 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
    public class ClientJSON extends Activity implements OnClickListener {
     
    	private static final String LOG_TAG = "ClientJSON";
        private static final String NOM_HOTE_SEARCH = "http://10.0.2.2:8080/Webfret";
    	private static final String PATH_METHODE = "/agent";
    	private Button getTextButton;
    	private JSONArray jsonArray;
    	private ProgressDialog progressDialog;
    	//private ListView list;
    	//private List<String> listsName = null;
     
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		// Avec une interface graphique, mettre dans un thread
    		getTextButton = (Button)findViewById(R.id.Button);
    		getTextButton.setOnClickListener(this);
    		//list= (ListView) findViewById(R.id.list);
    	}
     
    	protected void downloadText(String urlStr) {
    		progressDialog = ProgressDialog.show(this, "", "Loading file...");
    		final String url = urlStr;
    		new Thread () {
    			public void run() {
    				Message msg = Message.obtain();
    				msg.what=1;
    				HttpClient httpClient = new DefaultHttpClient();
    				try {
    					HttpGet httpGet = new HttpGet(url);
    					HttpResponse httpResponse = httpClient.execute(httpGet);
    					HttpEntity entity = httpResponse.getEntity();
     
    					if (entity != null) {
    						InputStream inputStream = entity.getContent();
    						// Lecture du retour au format JSON
    						BufferedReader bufferedReader = new BufferedReader(
    								new InputStreamReader(inputStream));
    						StringBuilder stringBuilder = new StringBuilder();
     
    String ligneLue = bufferedReader.readLine();
    while (ligneLue != null) {
     stringBuilder.append(ligneLue + "\n");
    ligneLue = bufferedReader.readLine();
    					}
    	inputStream.close();
    	String str2=stringBuilder.toString();
         Log.i(LOG_TAG, str2);
    // Analyse du retour
    jsonArray = new JSONArray(stringBuilder.toString());
    System.out.println(jsonArray.length());
    String str=jsonArray.toString();
    Log.i(LOG_TAG, str);
    int i=0;
    JSONObject kj;
    while(jsonArray.optJSONObject(i) != null){
    kj=jsonArray.getJSONObject(i);
    	i++;
    Integer id=kj.getInt("idagt");
    Log.i(LOG_TAG, id.toString());
    String user=kj.getString("useragt");
    Log.i(LOG_TAG, user);
    String pwd=kj.getString("pwdagt");
    Log.i(LOG_TAG, pwd);
    //affichage(user, pwd);
    						}
    					}
    				}
     catch (IOException e) {
    					Log.e(LOG_TAG, e.getMessage());
    				} catch (JSONException e) {
    					Log.e(LOG_TAG, e.getMessage());
    				}
    				//messageHandler.sendMessage(msg);
    				progressDialog.dismiss();
    			};
    		}.start();
    	}
     
     
     
    	@Override
    	public void onClick(View arg0) {
    		downloadText(NOM_HOTE_SEARCH+PATH_METHODE);
    		}
    }
    Themouton est ce que tu peux mieux eclaircir ??merci

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 44
    Points : 76
    Points
    76
    Par défaut
    Dans ton code tu remplaces la partie Thread par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    new AsyncTask<Url,Integer,List<TonBean>>() {
    protected List<TonBean> doInBackground(String... params) {
    List<TonBean> tonBeanList = new ArrayList();
     
    -- ici traitement long qui remplie la liste, appel http, parse etc...
     
    return tonBeanList;
    }
     
    protected void onPostExecute(List<TonBean> result) {
    -- ici on se retrouve dans le UI Thread et tu peux maintenant remplir ta listview avec le resultat de retour.
    }
    }.execute(url);
    Selon la javadoc pour AsyncTask, le premier géneric correspond au type de paramètre, dans ton cas j'ai mis String car tu fournis une url, le second c'est pour un progress en cours d'execution, j'ai mis Integer si par exemple tu veux renvoyé le nombre de ligne traité et l'afficher dans ta progresse dialog. Et le troisième c'est le type de retour, dans ce cas une liste d'objet.
    Tu es pas obliger de mettre un paramètre d'entrée tu peux mettre Void et dans ce cas faire à la fin .execute(); Car tu mets déjà ton url en final donc tu y auras acces depuis le doInBackground.

  6. #6
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2011
    Messages : 64
    Points : 52
    Points
    52
    Par défaut merci
    merci bcp mais j'ai essayé ça n'a pas marché

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 322
    Points : 494
    Points
    494
    Par défaut
    ah dommage...


    Edit : Si tu nous donnes pas de codes, je ne pourrais pas faire de meilleures réponses

  8. #8
    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
    Quand tu dis que ça marche pas, c'est parce que tu as une erreur à la compil ? Une exception au lancement ? Tu n'as pas d'erreurs mais pas le résultat attendu ?
    (bien évidemment, si tu pouvais détaillé ta réponse, la qualité de ton aide n'en serait que meilleurs)
    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

  9. #9
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 44
    Points : 76
    Points
    76
    Par défaut
    Comme disent les 2 autres personnes, c'est ballot. Dés précision ?

  10. #10
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2011
    Messages : 64
    Points : 52
    Points
    52
    Par défaut bean?
    slt à tous ,
    themouton tu m'as indiqué qu'il faut mettre le bean.J'ai pas bien assimilé

  11. #11
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2011
    Messages : 64
    Points : 52
    Points
    52
    Par défaut bjr les amis
    voici 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
     
    public class ClientJson extends Activity  {
     
    	private static final String LOG_TAG = "ClientJson";
        private static final String NOM_HOTE_SEARCH = "http://10.0.2.2:8080/Webfret";
    	private static final String PATH_METHODE = "/agent";
    	final String url =PATH_METHODE +NOM_HOTE_SEARCH;
    	//private Button getTextButton;
    	private JSONArray jsonArray;
     
     
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		//getTextButton = (Button)findViewById(R.id.Button);
    		//getTextButton.setOnClickListener(this);
    		new AsyncTask<Void,Void,List<String>>() {
                 @Override
        protected List<String> doInBackground(Void... params) {
     
                	 List<String> res=new ArrayList<String>();
                	 HttpClient httpClient = new DefaultHttpClient();
     				try {
     					HttpGet httpGet = new HttpGet(url);
     					HttpResponse httpResponse = httpClient.execute(httpGet);
     					HttpEntity entity = httpResponse.getEntity();
     
     					if (entity != null) {
     						InputStream inputStream = entity.getContent();
     						// Lecture du retour au format JSON
     						BufferedReader bufferedReader = new BufferedReader(
     								new InputStreamReader(inputStream));
     						StringBuilder stringBuilder = new StringBuilder();
     
     						String ligneLue = bufferedReader.readLine();
     						while (ligneLue != null) {
     							stringBuilder.append(ligneLue + "\n");
     							ligneLue = bufferedReader.readLine();
     						}
     						inputStream.close();
     						String str2=stringBuilder.toString();
     						Log.i(LOG_TAG, str2);
     						// Analyse du retour
     						jsonArray = new JSONArray(stringBuilder.toString());
     						System.out.println(jsonArray.length());
     						String str=jsonArray.toString();
     						Log.i(LOG_TAG, str);
     						int i=0;
     						JSONObject kj;
     						while(jsonArray.optJSONObject(i) != null){
     							kj=jsonArray.getJSONObject(i);
     							i++;
     							Integer id=kj.getInt("idagt");
     							Log.i(LOG_TAG, id.toString());
     							String user=kj.getString("useragt");
     							Log.i(LOG_TAG, user);
     							String pwd=kj.getString("pwdagt");
     							Log.i(LOG_TAG, pwd);
     						    String ids=id.toString();
     						    String s=ids+user+pwd;
     						    res.add(s);
     						}
     					}
     				} catch (IOException e) {
     					Log.e(LOG_TAG, e.getMessage());
     				} catch (JSONException e) {
     					Log.e(LOG_TAG, e.getMessage());
     				}
     
    					return res;
                 }
                 protected void onPostExecute(List<? extends Map<String, ?>> res)
                 {
              	ListView list = (ListView)findViewById(R.id.list);
              	list.setAdapter(new SimpleAdapter(ClientJson.this, res,R.layout.affichage, new String[]
         {"ids","user","pwd"},new int[] { R.id.id,R.id.name,R.id.prenom}));
                 }   
              }.execute(); 
          }}
    et voici le logcat

    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
    06-16 13:31:14.632: ERROR/AndroidRuntime(684): FATAL EXCEPTION: AsyncTask #1
    06-16 13:31:14.632: ERROR/AndroidRuntime(684): java.lang.RuntimeException: An error occured while executing doInBackground()
    06-16 13:31:14.632: ERROR/AndroidRuntime(684):     at android.os.AsyncTask$3.done(AsyncTask.java:200)
    06-16 13:31:14.632: ERROR/AndroidRuntime(684):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
    06-16 13:31:14.632: ERROR/AndroidRuntime(684):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
    06-16 13:31:14.632: ERROR/AndroidRuntime(684):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
    06-16 13:31:14.632: ERROR/AndroidRuntime(684):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    06-16 13:31:14.632: ERROR/AndroidRuntime(684):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
    06-16 13:31:14.632: ERROR/AndroidRuntime(684):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
    06-16 13:31:14.632: ERROR/AndroidRuntime(684):     at java.lang.Thread.run(Thread.java:1096)
    06-16 13:31:14.632: ERROR/AndroidRuntime(684): Caused by: java.lang.IllegalStateException: Target host must not be null, or set in parameters.
    06-16 13:31:14.632: ERROR/AndroidRuntime(684):     at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:561)
    06-16 13:31:14.632: ERROR/AndroidRuntime(684):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:292)
    06-16 13:31:14.632: ERROR/AndroidRuntime(684):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
    06-16 13:31:14.632: ERROR/AndroidRuntime(684):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    06-16 13:31:14.632: ERROR/AndroidRuntime(684):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
    06-16 13:31:14.632: ERROR/AndroidRuntime(684):     at com.test.ClientJson$1.doInBackground(ClientJson.java:48)
    06-16 13:31:14.632: ERROR/AndroidRuntime(684):     at com.test.ClientJson$1.doInBackground(ClientJson.java:1)
    06-16 13:31:14.632: ERROR/AndroidRuntime(684):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
    06-16 13:31:14.632: ERROR/AndroidRuntime(684):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
    06-16 13:31:14.632: ERROR/AndroidRuntime(684):     ... 4 more

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 322
    Points : 494
    Points
    494
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     protected void onPostExecute(List<? extends Map<String, ?>> res)
    (jamais vu ça)
    Heu... ça serait plus simple de mettre List<String> ? ou c'est pas possible ?
    J'ai pas fait le test mais ça me semble un peu bizarre le List<? extends Map<String, ?>>

  13. #13
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 44
    Points : 76
    Points
    76
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     private static final String NOM_HOTE_SEARCH = "http://10.0.2.2:8080/Webfret";
    	private static final String PATH_METHODE = "/agent";
    	final String url =PATH_METHODE +NOM_HOTE_SEARCH;
    Il y a un problème avec ton url.

    Et aussi un problème avec ton type de retour du doInBackground ( actuellement List<String>) c'est plutôt un List<Map<String,Object>> en me basant sur ton onPostExecute.

    il y a un autre poste avec exactement le même problème que toi dont j'ai donné la solution. ici

  14. #14
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 44
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par AndroChristophe Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     protected void onPostExecute(List<? extends Map<String, ?>> res)
    (jamais vu ça)
    Heu... ça serait plus simple de mettre List<String> ? ou c'est pas possible ?
    J'ai pas fait le test mais ça me semble un peu bizarre le List<? extends Map<String, ?>>
    Une notation des générique pour spécialiser le type des items de la liste. On précise juste que la liste doit contenir des objets qui étendent une Map de String et ? (en gros Object)

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 322
    Points : 494
    Points
    494
    Par défaut
    Citation Envoyé par themouton Voir le message
    Une notation des générique pour spécialiser le type des items de la liste. On précise juste que la liste doit contenir des objets qui étendent une Map de String et ? (en gros Object)
    Ok merci, j'aime bien le "en gros Object". C'est plus clair pour moi.

    En tout cas bien vu pour l'url

Discussions similaires

  1. affichage des données provenant d'un web service soap dans une listview
    Par nagca dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 04/07/2011, 17h11
  2. [MySQL] Affichage des données provenant de la base
    Par titirigole dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 30/12/2008, 20h08
  3. [MySQL] Affichage des données provenant du formulaire
    Par ciel65 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 16/12/2006, 18h35
  4. TDBCtrlGrid - Affichage des données
    Par audreyb dans le forum Bases de données
    Réponses: 1
    Dernier message: 24/10/2004, 13h10
  5. [JTable] Problème d'affichage des données
    Par ddams dans le forum Composants
    Réponses: 2
    Dernier message: 15/09/2004, 17h07

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