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 :

force close lors de l'affichage des données parsées


Sujet :

Android

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 77
    Points : 40
    Points
    40
    Par défaut force close lors de l'affichage des données parsées
    Bonsoir à tous,

    Je voudrais récupérer des données extraites à partir de ma BDD mysql sous forme d'une liste. Lorsque j'ai testé mon programme avec le login et le mot de passe relatifs au premier utilisateur situé dans ma table user ça marchait. Mais si je teste avec d'autres utilisateurs ça provoque un force close de l'application avec cette exception: java.lang.NullPointerException au niveau de cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JSONArray  offres_e = json.getJSONArray("offres_enregistrees");
    Le LogCat m'affiche également cette erreur: 04-11 20:56:41.883: E/log_tag(297): Error parsing data org.json.JSONException: A JSONObject text must begin with '{' at character 1 of <br />

    Ci-après mon 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
    package com.projet.tmjob;
     
    import java.util.ArrayList;
    import java.util.HashMap;
     
    import org.apache.http.NameValuePair;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
     
    import android.app.ListActivity;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.ListAdapter;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
     
    public class OffresEnregistrees extends ListActivity {
    	private static final String MY_PREFERENCES = "mespreferences";
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
        	SharedPreferences sharedPreferences = getSharedPreferences(MY_PREFERENCES, 0);
            String id = sharedPreferences.getString("id", "");
            super.onCreate(savedInstanceState);
            ArrayList<NameValuePair> identifiant = new ArrayList<NameValuePair>();
    		identifiant.add(new BasicNameValuePair("id", id));
            setContentView(R.layout.list_enregist);
            ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
            JSONObject json = JSONfunctions.getJSONUrlParam("http://10.0.2.2/mesRequetes/off_enregistrees.php", identifiant);
            try{
            	JSONArray  offres_e = json.getJSONArray("offres_enregistrees");
    	        for(int i=0;i<offres_e.length();i++){						
    				HashMap<String, String> map = new HashMap<String, String>();	
    				JSONObject o = offres_e.getJSONObject(i);
     
    	        	map.put("poste", "Poste:" + o.getString("poste"));
    	        	map.put("idoff", o.getString("idoff"));
    	        	mylist.add(map);
    	        	Log.i("log_tag","Poste:"+o.getString("poste")+ 
    						", Numero de l'offre:"+o.getString("idoff")
    						);
    			}		
            }catch(JSONException e)        {
            	 Log.e("log_tag", "Error parsing data "+e.toString());
            }
     
            ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.off_enregistrees, 
                            new String[] { "poste", "idoff" }, 
                            new int[] { R.id.TV_poste, R.id.TV_idoffre });
     
            setListAdapter(adapter);
            final ListView lv = getListView();
            lv.setTextFilterEnabled(true);	
      }
    }
    Merci de m'aider

  2. #2
    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
    1. il est très étonnant que ca ne crash pas plutôt avec un NetworkOnMainTheadException... On ne doit *jamais* faire d'appels longs (opérations réseau, requete base de donnée) dans les fonction de l'UI. Arretes ton serveur et tu verras le résultat (si pas de NetworkOnMainThread exception, il y aura un pas très joli ANR dialog).

    2. Je ne connais pas JSONfunctions.getJSONUrlParam ... En tout cas, vu qu'elle renvoi un objet, j'imagine qu'elle doit balancer tout un tas d'exceptions en cas d'erreur réseau / parsing JSON qui ne sont pas gérées ici.

    3. Il semble que l'array ne soit pas composée d'objets JSON.. si tu pouvais nous copier la chaine json recue cela aiderai...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Citation Envoyé par Nicroman
    1. il est très étonnant que ca ne crash pas plutôt avec un NetworkOnMainTheadException... On ne doit *jamais* faire d'appels longs (opérations réseau, requete base de donnée) dans les fonction de l'UI. Arretes ton serveur et tu verras le résultat (si pas de NetworkOnMainThread exception, il y aura un pas très joli ANR dialog).
    À partir de HoneyComb, pas avant

    Après, au vu de l'erreur rapportée, tu sembles parser un document HTML plutôt qu'un JSON.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 77
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    Merci pour vos réponses. En fait, j'ai découvert la source de l'erreur: lorsque les champs à afficher ne correspondent à aucune valeur dans la base de données, ça provoque ce problème. Pour cela, je devrais ajouter an " else if " afin qu'android m'affiche ma liste avec des champs vides en cas où les valeurs demandées n'existent pas dans la base.

    J'ai déjà réalisé ça dans le cas d'un textview comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TextView nom = (TextView) findViewById(R.id.tv_nom1);
    		    if (profil.has("last_name"))
    		    	   nom.setText(profil.getString("last_name")); 
    		    	else
    		    	    nom.setText("");
    Par contre je sais pas comment le faire dans le cas d'une liste.
    Voilà un extrait du code sur lequel je voudrais ajouter la condition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    try{
            	JSONArray  offres_e = json.getJSONArray("offres_enregistrees");
    	        for(int i=0;i<offres_e.length();i++){						
    				HashMap<String, String> map = new HashMap<String, String>();	
    				JSONObject o = offres_e.getJSONObject(i);
     
    	        	map.put("poste", "Poste:" + o.getString("poste"));
    	        	map.put("idoff", o.getString("idoff"));
    	        	mylist.add(map);
    	        	Log.i("log_tag","Poste:"+o.getString("poste")+ 
    						", Numero de l'offre:"+o.getString("idoff")
    						);
    			}
    Merci d'avance

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/09/2012, 11h29
  2. Réponses: 2
    Dernier message: 25/02/2010, 14h12
  3. [MySQL] Avertissements lors de l'affichage des données
    Par argon dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/06/2009, 20h34
  4. Réponses: 10
    Dernier message: 25/05/2008, 11h34
  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