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

Composants graphiques Android Discussion :

Problème d'affichage des données sur listView


Sujet :

Composants graphiques Android

  1. #1
    Membre du Club
    Inscrit en
    Mars 2012
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 165
    Points : 59
    Points
    59
    Par défaut Problème d'affichage des données sur listView
    Bonjour,

    Je travaille sur une application Android dont l'objectif est de récupérer des données issus d'une bdd MySQL en générant des réponses JSON, et aussi afficher ces données dans une listView.

    L'opération de récupération des données est bien faite.

    Le seul problème se focalise dans l'affichage.

    Voilà ma classe qui contient tout :

    Code java : 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
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    public class afficherAbonnes extends Activity{
     
    	 ListView listView;
    	 private String URL = "http://10.0.2.2/FlashInfoWebServices/listeabonnes.php";
         ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
         List<Utilisateur> listeUsers = null;
     
         ArrayList<Utilisateur> arrayOfWebData = new ArrayList<Utilisateur>();
         FancyAdapter aa = null;
     
         static ArrayList<String> resultRow;
     
    	 @Override
    	 public void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.afficherabonnesadmin);
     
           listView = (ListView) findViewById(R.id.listView1);
     
           getServerData(URL);
     
           aa = new FancyAdapter();
           listView.setAdapter(aa);
    	}
     
     
     
     
    	 class FancyAdapter extends ArrayAdapter<Utilisateur>
    	 {
     
    		public FancyAdapter() {
    			super(afficherAbonnes.this, android.R.layout.simple_list_item_1, arrayOfWebData);
    			// TODO Auto-generated constructor stub
    		}
     
    		public View getView(int position, View convertView, ViewGroup parent)
    		{
    			ViewHolder holder;
     
    			if(convertView==null) {
    				LayoutInflater inflater = getLayoutInflater();
    				convertView = inflater.inflate(R.layout.list_abonnes, null);
    				holder = new ViewHolder(convertView);
     
    				convertView.setTag(holder);
    			}
    			else
    			{
    				holder = (ViewHolder) convertView.getTag();
    			}
    			holder.form((Utilisateur) arrayOfWebData.get(position));
     
    			return (convertView);
     
    		}
     
    	 }
     
    	 class ViewHolder {
     
    		 public TextView login = null;
    		 public TextView password = null;
    		 public TextView nom = null;
     
    		 public ViewHolder(View view) {
    			 login = (TextView) findViewById(R.id.textLogin);
    			 password = (TextView) findViewById(R.id.textPassword);
    			 nom = (TextView) findViewById(R.id.textNom);
    		 }
     
    		 void form(Utilisateur i) {
    			 login.setText(i.getLogin().toString());
    			 password.setText(i.getPassword().toString());
    			 nom.setText(i.getNom().toString());
    		 }
    	 }
     
     
    	 public void getServerData(String URL) {
     
    			InputStream is = null;
    			String result = "";
    			//JSONObject jArray = null;
    			JSONArray jArray = null;
     
    			try {
    				HttpClient httpclient = new DefaultHttpClient();
    				HttpPost httppost = new HttpPost(URL);
    				HttpResponse response = httpclient.execute(httppost);
    				HttpEntity entity = response.getEntity();
    				is = entity.getContent();
     
    			} catch(Exception e) {
    				Log.e("log_tag", "Error in http connection " + e.toString());
    			}
     
    			// Convertion de la requête en string
    			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();
    				Log.e("log_tag", "Resulta du fichier jsp" + result);
     
    			}catch(Exception e){
    				Log.e("log_tag", "Error converting result " + e.toString());
    			}
    			// Parse les données JSON
    			try{
    			    jArray = new JSONArray(result);
    			    for(int i=0; i<jArray.length(); i++)
    			    {
    			    	JSONObject json_data = jArray.getJSONObject(i);
    			    	Toast.makeText(this, json_data.getString("login"), Toast.LENGTH_SHORT).show();
    			    	Utilisateur resultRow = new Utilisateur(json_data.getString("login")
    			    			, json_data.getString("password")
    			    			, json_data.getString("nom"));
    			    	arrayOfWebData.add(resultRow);
    			    }
     
    			}catch(JSONException e){
    				Log.e("log_tag", "Error parsing data " + e.toString());
    			}
     
    	}
     
     
    }

    Voilà les erreurs qui s'affichent quand j'accède à l'activité :

    08-16 21:07:31.888: E/AndroidRuntime(788): java.lang.NullPointerException
    08-16 21:07:31.888: E/AndroidRuntime(788): at adminActivity.afficherAbonnes$ViewHolder.form(afficherAbonnes.java:109)
    08-16 21:07:31.888: E/AndroidRuntime(788): at adminActivity.afficherAbonnes$FancyAdapter.getView(afficherAbonnes.java:88)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.AbsListView.obtainView(AbsListView.java:1315)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.ListView.measureHeightOfChildren(ListView.java:1198)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.ListView.onMeasure(ListView.java:1109)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.View.measure(View.java:8171)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1012)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.LinearLayout.measureVertical(LinearLayout.java:381)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.View.measure(View.java:8171)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.View.measure(View.java:8171)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.View.measure(View.java:8171)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.View.measure(View.java:8171)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1012)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.LinearLayout.measureVertical(LinearLayout.java:381)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.View.measure(View.java:8171)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.View.measure(View.java:8171)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1012)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.LinearLayout.measureVertical(LinearLayout.java:381)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.View.measure(View.java:8171)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.View.measure(View.java:8171)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.LinearLayout.measureVertical(LinearLayout.java:526)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.View.measure(View.java:8171)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.View.measure(View.java:8171)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.ViewRoot.performTraversals(ViewRoot.java:801)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.os.Handler.dispatchMessage(Handler.java:99)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.os.Looper.loop(Looper.java:123)
    08-16 21:07:31.888: E/AndroidRuntime(788): at android.app.ActivityThread.main(ActivityThread.java:4627)
    08-16 21:07:31.888: E/AndroidRuntime(788): at java.lang.reflect.Method.invokeNative(Native Method)
    08-16 21:07:31.888: E/AndroidRuntime(788): at java.lang.reflect.Method.invoke(Method.java:521)
    08-16 21:07:31.888: E/AndroidRuntime(788): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    08-16 21:07:31.888: E/AndroidRuntime(788): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    08-16 21:07:31.888: E/AndroidRuntime(788): at dalvik.system.NativeStart.main(Native Method)
    J ai besoin de votre aide,

    Merci d'avance.

  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
    Hmmm.. on dirait un tutorial avec des mélanges....

    Au passage, la balise c'est "CODE" (et pas QUOTE, j'ai corrigé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public class afficherAbonnes extends Activity{
    Première remarque, traditionellement, en JAVA, les noms de types sont en CamelCase... les identifiants commencant par une minuscules sont des variables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	 ListView listView;
    	 private String URL = "http://10.0.2.2/FlashInfoWebServices/listeabonnes.php";
         ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
         List<Utilisateur> listeUsers = null;
         ArrayList<Utilisateur> arrayOfWebData = new ArrayList<Utilisateur>();
         FancyAdapter aa = null;
     
         static ArrayList<String> resultRow;
    Il y a beaucoup de mélange entre private / pas private / static / pas static... il me semble que URL a pour vocation d'être une statique, mais ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.afficherabonnesadmin);
     
                listView = (ListView) findViewById(R.id.listView1);
     
                getServerData(URL);
    Attention pas d'accès à Internet... dans les fonctions UI (onXXXXX)
    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
     
           aa = new FancyAdapter();
           listView.setAdapter(aa);
    }
     
    	 class FancyAdapter extends ArrayAdapter<Utilisateur>
    	 {
     
    		public FancyAdapter() {
    			super(afficherAbonnes.this, android.R.layout.simple_list_item_1, arrayOfWebData);
    		}
     
    		public View getView(int position, View convertView, ViewGroup parent)
    		{
    			ViewHolder holder;
     
    			if(convertView==null) {
    				LayoutInflater inflater = getLayoutInflater();
    				convertView = inflater.inflate(R.layout.list_abonnes, null);
    				holder = new ViewHolder(convertView);
     
    				convertView.setTag(holder);
    			}
    			else
    			{
    				holder = (ViewHolder) convertView.getTag();
    			}
    			holder.form((Utilisateur) arrayOfWebData.get(position));
     
    			return (convertView);
     
    		}
     
    	 }
     
    	 class ViewHolder {
     
    		 public TextView login = null;
    		 public TextView password = null;
    		 public TextView nom = null;
     
    		 public ViewHolder(View view) {
    			 login = (TextView) findViewById(R.id.textLogin);
    			 password = (TextView) findViewById(R.id.textPassword);
    			 nom = (TextView) findViewById(R.id.textNom);
    		 }
    Attention... là tu utilises le findViewById de l'activité du coup... il trouvera jamais les textview qui seront à null....
    Il faut utiliser le "view" en paramètre (un cast en ViewGroup s'impose)


    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
     
    		 void form(Utilisateur i) {
    			 login.setText(i.getLogin().toString());
    			 password.setText(i.getPassword().toString());
    			 nom.setText(i.getNom().toString());
    		 }
    	 }
     
     
    	 public void getServerData(String URL) {
     
    			InputStream is = null;
    			String result = "";
    			//JSONObject jArray = null;
    			JSONArray jArray = null;
    Attention le code qui suit est faux....
    D'ailleurs toute les gestions des exceptions sont fausses... avec plein de NPE en cas d'erreurs, et pas de stacktrace...

    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
     
    			try {
    				HttpClient httpclient = new DefaultHttpClient();
    				HttpPost httppost = new HttpPost(URL);
    				HttpResponse response = httpclient.execute(httppost);
    				HttpEntity entity = response.getEntity();
    				is = entity.getContent();
     
    			} catch(Exception e) {
    				Log.e("log_tag", "Error in http connection " + e.toString());
    			}
     
    			// Convertion de la requête en string
    			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();
    				Log.e("log_tag", "Resulta du fichier jsp" + result);
     
    			}catch(Exception e){
    				Log.e("log_tag", "Error converting result " + e.toString());
    			}
    Il peut être entièrement remplacé 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
     
    try {
        // vraiment 1 client à chaque requete ?
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(URL);
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        String result = EntityUtils.toString(entity);
        ... parsing du JSON ici ...
    } catch (Exception ex) {
       // ton application s'appelle vraiment "log_tag" ?
       Log.e("log_tag", "Error parsing data ",e);
       // que fait-on en cas d'erreur ? Comment le signale-t-on à l'appelant ?
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre du Club
    Inscrit en
    Mars 2012
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 165
    Points : 59
    Points
    59
    Par défaut
    Je vous remercie infiniment pour la réponse. C'est résolu

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

Discussions similaires

  1. Problème d'affichage des données depuis un Listview
    Par cadeau10 dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 13/05/2011, 14h42
  2. [MySQL] Problème avec affichage des données d'une base MySQL
    Par leclone dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 27/12/2006, 12h40
  3. ordre d'affichage des données sur un formulaire
    Par puppusse79 dans le forum Access
    Réponses: 5
    Dernier message: 20/09/2006, 15h07
  4. [MySQL] Problème d'affichage des données!
    Par ghyosmik dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 18/09/2006, 15h43
  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