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 :

Votre avis sur la "propreté" de ce code ?


Sujet :

Android

  1. #1
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut Votre avis sur la "propreté" de ce code ?
    Bonjour,
    totalement newbie en android et java et afin de prendre de bonnes (ou de ne pas prendre de trop mauvaises) habitudes, pouvez-vous me dire si ce très petit bout de code est intelligible et codé dans les "standards" ?

    C'est pour lister les sms d'un téléphone, en vue de les intégrer dans une base de données sur internet.
    Et accessoirement m'éclairer sur les points suivants, s'il vous plaît ?

    • Différence entre final et public ?
    • Pour ce que cela fait, le code est-il correct ? Peut-il être optimisé ? Doit-il être différement structuré
    • Ne faut-il pas fermer le curseur ?
    • avantages/inconvénients de créer des objets globaux ou locaux ? toast vs toast1 ?
    • utilité de gérer les exceptions comme cela (méthode par méthode) ? N'existe-t'il pas une gestion au niveau supérieur ?
    • SimpleCursorAdapter semble désormais ne plus être la meilleure méthode. Il est préconisé d'utiliser LoaderManager et CursorLoader. Faut-il toujours suivre aveuglément ces conseils ?
    • Comment puis-je déclarer globalement un objet toast ?
    • public Toast toast=Toast.makeText(context, "blablabla", Toast.LENGTH_LONG); plante l'aappli
    • final Toast toast=Toast.makeText(context, "blablabla", Toast.LENGTH_LONG); ne peut pas être modifié !!
    • Je voudrais mettre les valeurs du tableau valeurDesColonnes dans les textview R.id.lib_sms_01,R.id.lib_sms_02 etc. Est-ce possible ?
    • Si demain le nombre de colonnes du curseur change (augmente), je vais être embêté !!! Est-il possible de dynamiser le code pour anticiper cela ? Est-il préférable d'utiliser une table par exemple, qui aura un nombre de lignes variable ?
    • Est-il possible de récupérer dynamiquement le type des colonnes du curseur, pour par exemple formater correctement la date (date/heure) du sms ?



    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
    import android.app.ListActivity;
    import android.content.Context;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.widget.ListAdapter;
    import android.widget.SimpleCursorAdapter;
    import android.widget.Toast;
     
     
    public class ListeSms extends ListActivity {
     
    	final Context context= ListeSms.this;
    	public enum SousBoites { sent, inbox, draft, undelivered, failed, all };
    	//public Toast toast=Toast.makeText(context, "blablabla", Toast.LENGTH_LONG);
    	public void onCreate(Bundle savedInstanceState) {
    		try {
    			super.onCreate(savedInstanceState);
    	        //setContentView(R.layout.listessms01); //	surtout pas décommenter cette ligne : il ne faut pas initialiser la fenêtre
    			lectureSMSBoitesSMS(SousBoites.all);
    		} catch (Exception e) {
    //			toast=Toast.makeText(context, "Erreur !!!!"+ e, Toast.LENGTH_LONG);
    //			toast.show();
    			Toast toast1=Toast.makeText(context, "Erreur !"+ e, Toast.LENGTH_LONG);
    			toast1.show();
    		}
    	}
     
     
    	private void lectureSMSBoitesSMS(SousBoites genre) {
    		String aParser="";
     
    		try {
    			switch (genre) {
    				case sent:aParser="content://sms/sent";break;
    				case inbox:aParser="content://sms/inbox";break;
    				case draft:aParser="content://sms/draft";break;
    				case undelivered:aParser="content://sms/undelivered";break;
    				case failed:aParser="content://sms/failed";break;
    				case all:aParser="content://sms";break;
    				default :
    					Toast toast=Toast.makeText(context, "Erreur de programmation", Toast.LENGTH_LONG);
    					toast.show();
    			}
    			Uri uriBoiteReceptionSMS = Uri.parse(aParser);
     
    	    	Cursor curseur = getContentResolver().query(uriBoiteReceptionSMS, null, null, null, null);
    	    	startManagingCursor(curseur);
     
    //	    	String[] valeurDesColonnes = new String[] { "_id","thread_id","address","person","date","protocol","read","status","type","reply_path_present","subject","body","service_center","locked","error_code","seen" };
    	    	String[] valeurDesColonnes = curseur.getColumnNames();
    	    	int[] vuesQuiAffichentLesValeurs = new int[] { R.id.sms_01,R.id.sms_02,R.id.sms_03,R.id.sms_04,R.id.sms_05,R.id.sms_06,R.id.sms_07,R.id.sms_08,R.id.sms_09,R.id.sms_10,R.id.sms_11,R.id.sms_12,R.id.sms_13};
    	    	ListAdapter adapter = new SimpleCursorAdapter(this, R.layout.listessms01, curseur, valeurDesColonnes, vuesQuiAffichentLesValeurs);
    //	    	
    //	    	String[] valeurDesColonnes = curseur.getColumnNames();
    //	    	int[] vuesQuiAffichentLesNoms = new int[] { R.id.lib_sms_01,R.id.lib_sms_02,R.id.lib_sms_03,R.id.lib_sms_04,R.id.lib_sms_05,R.id.lib_sms_06,R.id.lib_sms_07,R.id.lib_sms_08,R.id.lib_sms_09,R.id.lib_sms_10,R.id.lib_sms_11,R.id.lib_sms_12,R.id.lib_sms_13};
    //	    	ListAdapter adapter = new SimpleCursorAdapter(this, R.layout.listessms01, curseur, valeurDesColonnes, vuesQuiAffichentLesNoms);	    		
     
    	    	setListAdapter(adapter);
    		} catch (Exception e) {
    			Toast toast1=Toast.makeText(context, "Erreur !"+ e, Toast.LENGTH_LONG);
    			toast1.show();
    		}
        }
    et
    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
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    	android:orientation="vertical" android:layout_width="fill_parent"
    	android:weightSum="1" android:layout_height="wrap_content">
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_01" android:layout_height="wrap_content" android:layout_width="50dp"></TextView>
    		<TextView android:id="@+id/sms_01" android:layout_height="wrap_content" android:layout_width="150dp"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_02" android:layout_height="wrap_content" android:layout_width="50dp"></TextView>
    		<TextView android:id="@+id/sms_02" android:layout_height="wrap_content" android:layout_width="150dp"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_03" android:layout_height="wrap_content" android:layout_width="50dp"></TextView>
    		<TextView android:id="@+id/sms_03" android:layout_height="wrap_content" android:layout_width="150dp"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_04" android:layout_height="wrap_content" android:layout_width="50dp"></TextView>
    		<TextView android:id="@+id/sms_04" android:layout_height="wrap_content" android:layout_width="150dp"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_05" android:layout_height="wrap_content" android:layout_width="50dp"></TextView>
    		<TextView android:id="@+id/sms_05" android:layout_height="wrap_content" android:layout_width="150dp"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_06" android:layout_height="wrap_content" android:layout_width="50dp"></TextView>
    		<TextView android:id="@+id/sms_06" android:layout_height="wrap_content" android:layout_width="150dp"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_07" android:layout_height="wrap_content" android:layout_width="50dp"></TextView>
    		<TextView android:id="@+id/sms_07" android:layout_height="wrap_content" android:layout_width="150dp"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_08" android:layout_height="wrap_content" android:layout_width="50dp"></TextView>
    		<TextView android:id="@+id/sms_08" android:layout_height="wrap_content" android:layout_width="150dp"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_09" android:layout_height="wrap_content" android:layout_width="50dp"></TextView>
    		<TextView android:id="@+id/sms_09" android:layout_height="wrap_content" android:layout_width="150dp"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_10" android:layout_height="wrap_content" android:layout_width="50dp"></TextView>
    		<TextView android:id="@+id/sms_10" android:layout_height="wrap_content" android:layout_width="150dp"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_11" android:layout_height="wrap_content" android:layout_width="50dp"></TextView>
    		<TextView android:id="@+id/sms_11" android:layout_height="wrap_content" android:layout_width="150dp"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_12" android:layout_height="wrap_content" android:layout_width="50dp"></TextView>
    		<TextView android:id="@+id/sms_12" android:layout_height="wrap_content" android:layout_width="150dp"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_13" android:layout_height="wrap_content" android:layout_width="50dp"></TextView>
    		<TextView android:id="@+id/sms_13" android:layout_height="wrap_content" android:layout_width="150dp"></TextView>
    	</LinearLayout>
    </LinearLayout>
    D'avance, merci beaucoup pour vos commentaires et éclaircissements...
    Cordialement,
    Christophe Charron

  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
    Citation Envoyé par Christophe Charron Voir le message
    Bonjour,
    Salut,
    Je te recommande de commencer par un bon bouquin sur Java.... (ou les tutoriels ici)...
    Différence entre final et public ?
    En fait... c'est deux notions différentes...
    Il y a la partie "access-level modifier":
    • public = tout le monde peut accéder à la fonction/variable et l'utiliser, du moment que l'objet a été importé.
    • protected = seuls les objets hérités ou du même package (exactement) peuvent voir/utiliser la fonction/variable.
    • defaut (friendly?) = seuls les objets du même package peuvent voir/utiliser la fonction/variable
    • private = personne ne peut la voir...

    Et puis il ya d'autres modificateurs:
    • final = l'objet ne sera plus jamais modifié (permet à java d'optimiser), pour une classe, on ne peut pas en hériter, pour une fonction on ne peut pas l'overrider.
    • static = une seule instance de l'objet pour toutes les instances du parent.
    • synchronized = pour les fonction, un seul appel à cette fonction sur cet object pour le systeme en même temps.
    • abstract = simple définition, doit être implémenté dans une classe fille.
    • native = implémentation native sur la platforme.
    • transient = pour les variable indique que la variable n'a pas besoin d'etre incluse dans la serialisation (pour un cache par exemple).
    • volatile = dont la valeur peut etre modifiée par plusieurs thread à tout moment sans synchronization.

    C'est très important de coller la bonne définition... Par exemple, un callback doit être public ou protected. Un objet static à de bonnes chances d'etre private / friendly (sauf 'constantes').


    utilité de gérer les exceptions comme cela (méthode par méthode) ? N'existe-t'il pas une gestion au niveau supérieur ?
    Là encore, la gestion des exception est une partie assez complexe de java, avec deux école: Utilisation des exceptions comme "error management" ou pas. Il existe une école intermédiaire (celle que j'utilise): Toutes les "erreurs" héritent d'une exception propre à l'application (ou la librairie). Comme ca, la gestion d'erreur devient plus fluide:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try {
        maFonction();
    } catch (MonApplicationError error) {
        // error handling....
    }
    Toutes les autres exception (en particulier les "Runtime" sont donc propagées plus haut). Dans ton exemple, toutes les exceptions sont 'catchées', si une exception doit être remontée pour fermer l'application, il sera impossible de la fermer ...

    SimpleCursorAdapter semble désormais ne plus être la meilleure méthode. Il est préconisé d'utiliser LoaderManager et CursorLoader. Faut-il toujours suivre aveuglément ces conseils ?
    Oui pour Android 3+ ... Mais je n'ai pas essayé le package de compatibilité pour les loaders, donc ....
    Comment puis-je déclarer globalement un objet toast ?
    C'est pas une bonne idée en général... Ca demande de la mémoire permanente pour un truc temporaire (le toast)... D'autre part, tu ne sais pas si l'objet n'est pas réuitlisé plus tard...
    Est-il possible de récupérer dynamiquement le type des colonnes du curseur, pour par exemple formater correctement la date (date/heure) du sms ?
    Oui. Mais en fait, tu demandes explicitement les colonnes que tu veux, et à priori tu sais déjà ce qu'elles contiennent !!!
    Si la définition des SMS augmente, c'est pas grave vu que tu demandes exclusivement ces colonnes là...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Salut,
    Je te recommande de commencer par un bon bouquin sur Java.... (ou les tutoriels ici)...
    ...
    Merci beaucoup d'avoir pris le temps de répondre avec précision à toutes mes questions.
    Cela me donne de très bonnes pistes de travail et de réflexion.
    En fait, je ne souhaite pas vraiment commencer un bouquin trop généraliste qui surtout ne me permettrait pas de donner du sens à mon projet. Je préfère essayer de piquer 2-3 tutoriels android, les appliquer, en développer certaines fonctionnalités et ensuite en déduire soit des règles de programmation imposées par le langage, soit des règles de programmations induites par la perception du langage par le développeur. Mais ce n'est pas toujours possible et c'est pour cela que parfois je demande l'avis d'experts qui maîtrisent ces 2 aspects et qui savent faire la part des choses .
    Cordialement,
    Christophe Charron

  4. #4
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Je vais simplement reprendre ton code en te proposant des modifications.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	final Context context= ListeSms.this;
    // Préfère toujours l'utilisation de private / public / protected que de laisser le cas par défaut.
    	private final Context context= ListeSms.this;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	public enum SousBoites { sent, inbox, draft, undelivered, failed, all };
    	// De mémoire, les valeur des énumérations sont en UPPERCAST par convention
    	public enum SousBoites { SENT, INBOX, DRAFT, UNDELIVERED, FAILED, ALL};
    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
     
    	private void lectureSMSBoitesSMS(SousBoites genre) {
    		String aParser="";
    		// Personnellement, j'éviterai l'instanciation d'un String vide. Sauf si c'est l'une des valeur qui peut-être retourné.
    		String aParser = null;
    		try {
    			switch (genre) {
    				case sent:aParser="content://sms/sent";break;
    				//Il est préférable de prendre la place que au lieu de tous mettre sur une seule ligne
    				case sent:
    					aParser="content://sms/sent";
    					//Passe tes String en constantes final en propriété de ta classe
    private static final String CONTENT_SMS_SENT = "content://sms/sent";
    					aParser = CONTENT_SMS_SENT;
    				break;
     
    				default :
    					Toast toast=Toast.makeText(context, "Erreur de programmation", Toast.LENGTH_LONG);
    					toast.show();
    			}
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int[] vuesQuiAffichentLesValeurs = new int[] { R.id.sms_01,R.id.sms_02,R.id.sms_03,R.id.sms_04,R.id.sms_05,R.id.sms_06,R.id.sms_07,R.id.sms_08,R.id.sms_09,R.id.sms_10,R.id.sms_11,R.id.sms_12,R.id.sms_13};
    //Si il t'es possible de passé tes sms_XX sous la forme d'un tableau ou d'avoir une fonction qui retourne le tout sous la forme d'un tableau, je te conseil de le faire
    int[] vuesQuiAffichentLesValeurs = R.id.getSMSIntTable();
    il serai peut-être judicieux d'ajouter des commentaires explicatif dans ton code, voir de la javadoc.

    Pour finir, si une ligne de code est commenté, on doit expliquer pourquoi. Et si c'est une ligne qui ne doit jamais être dé-commenté, alors elle doit-être supprimer.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  5. #5
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Citation Envoyé par kolodz Voir le message
    Je vais simplement reprendre ton code en te proposant des modifications.

    Citation Envoyé par kolodz Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	final Context context= ListeSms.this;
    // Préfère toujours l'utilisation de private / public / protected que de laisser le cas par défaut.
    	private final Context context= ListeSms.this;
    .
    ok

    Citation Envoyé par kolodz Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	public enum SousBoites { sent, inbox, draft, undelivered, failed, all };
    	// De mémoire, les valeur des énumérations sont en UPPERCAST par convention
    	public enum SousBoites { SENT, INBOX, DRAFT, UNDELIVERED, FAILED, ALL};
    .
    ok

    Citation Envoyé par kolodz Voir le message
    [code]
    private void lectureSMSBoitesSMS(SousBoites genre) {
    String aParser="";
    // Personnellement, j'éviterai l'instanciation d'un String vide. Sauf si c'est l'une des valeur qui peut-être retourné.
    String aParser = null;
    ok

    Citation Envoyé par kolodz Voir le message
    [code]
    try {
    switch (genre) {
    case sent:aParser="content://sms/sent";break;
    //Il est préférable de prendre la place que au lieu de tous mettre sur une seule ligne
    case sent:
    aParser="content://sms/sent";
    perso, j'ai l'habitude, lorsqu'il n'y a qu'une instruction/affectation de tout mettre sur la même ligne. Si c'est un bloc, je saucissonne.

    Citation Envoyé par kolodz Voir le message
    [code]
    //Passe tes String en constantes final en propriété de ta classe
    pourquoi ?

    Citation Envoyé par kolodz Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private static final String CONTENT_SMS_SENT = "content://sms/sent";
    					aParser = CONTENT_SMS_SENT;
    				break;
     
    				default :
    					Toast toast=Toast.makeText(context, "Erreur de programmation", Toast.LENGTH_LONG);
    					toast.show();
    			}
    .
    et
    Citation Envoyé par kolodz Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int[] vuesQuiAffichentLesValeurs = new int[] { R.id.sms_01,R.id.sms_02,R.id.sms_03,R.id.sms_04,R.id.sms_05,R.id.sms_06,R.id.sms_07,R.id.sms_08,R.id.sms_09,R.id.sms_10,R.id.sms_11,R.id.sms_12,R.id.sms_13};
    //Si il t'es possible de passé tes sms_XX sous la forme d'un tableau ou d'avoir une fonction qui retourne le tout sous la forme d'un tableau, je te conseil de le faire
    int[] vuesQuiAffichentLesValeurs = R.id.getSMSIntTable();
    .
    Pourquoi ? Je ne comprends pas l'intérêt ...
    Citation Envoyé par kolodz Voir le message
    il serai peut-être judicieux d'ajouter des commentaires explicatif dans ton code, voir de la javadoc.

    Pour finir, si une ligne de code est commenté, on doit expliquer pourquoi. Et si c'est une ligne qui ne doit jamais être dé-commenté, alors elle doit-être supprimer.
    oui, mais une fois le code finalisé
    Citation Envoyé par kolodz Voir le message
    Cordialement,
    Patrick Kolodziejczyk.
    Merci infiniment pour ces précieux conseils très judicieux.
    Cordialement,
    Christophe Charron

  6. #6
    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
    Juste une remarque en passant, qui tient plus de l'optimisation qu'autre chose, mais bon, sur mobile, celà est tout de même bon à savoir :
    Les ENUM sont à éviter sur Android (si possible, et s'il n'altère pas trop la lisibilité du code bien sûr).

    Ils consomment plus de mémoires qu'une simple suite de constante (static final int).
    Plus d'informations ici :
    http://stackoverflow.com/questions/4...use-more-enums
    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

  7. #7
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    //Passe tes String en constantes final en propriété de ta classe
    pourquoi ?
    Cela permet de regrouper en un seul et unique endroit l'ensemble des variables :
    Facilité de la mise à jour.
    Non duplication des variables.

    Il ne faut pas oublié que les deux codes suivant sont identique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String value1 = "toto";
    String value2 = new String("toto");
    Cela crée une nouvelle instance à chaque fois. Ce qui est inutile dans de nombreux cas.
    Il en va de même avec la concaténation de String qui lorsqu'elle est récurrente doit être remplacer par l'utilisation de la classe StringBuilder.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  8. #8
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Citation Envoyé par MrDuChnok Voir le message
    Juste une remarque en passant, qui tient plus de l'optimisation qu'autre chose, mais bon, sur mobile, celà est tout de même bon à savoir :
    Les ENUM sont à éviter sur Android (si possible, et s'il n'altère pas trop la lisibilité du code bien sûr).

    Ils consomment plus de mémoires qu'une simple suite de constante (static final int).
    Plus d'informations ici :
    http://stackoverflow.com/questions/4...use-more-enums
    Je suis très preneur des ces "remarques en passant".

    Il semblerait que les choses aient évolué ?? http://stackoverflow.com/questions/5...ds-performance.
    Cela ma aussi fait découvrir http://developer.android.com/guide/p...ml#avoid_enums

    Sinon, pour jouer avec un switch, comment se passer d'un enum, dans mon cas ?
    Cordialement,
    Christophe Charron

  9. #9
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Un énuméré est un nombre dont les valeurs ont un nom.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public enum SousBoites { SENT, INBOX, DRAFT, UNDELIVERED, FAILED, ALL};
    En interne : sousboite est un int et les valeurs sont des valeurs 1/2/3/4/5.
    Si tu remplace Sousboites par un int (ce qui l'est de tout façon)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public static final int SENT = 1;
    public static final int INBOX = 2;
    public static final int DRAFT =3;
    public static final int UNDELIVERED = 4;
    public static final int FAILED = 5;
    public static final int ALL = 6;
    Et tu réalise ton switch avec ces valeurs.

    Maintenant, dans la plus part des cas la performance gagné par ce genre de codage n'est pas significative. Et il est préférable d'avoir un code propre et compréhensible.
    Il est probable que l'optimisation d'aujourd'hui ne soit plus nécessaire demain, car directement réaliser par la JVM.
    Aujourd'hui on factorise notre code via des fonctions, alors que le code s'exécuterait plus rapidement si on codait tout directement...

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  10. #10
    Membre averti Avatar de _Xavier_
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2009
    Messages : 311
    Points : 390
    Points
    390
    Par défaut
    Je n'ai pas lu tout le code, j'ai juste deux points à souligner :
    • width="50dp" : pour les unités des dimensions il vaut mieux utiliser les dip (Density Independant Pixel) pour éviter de voir les écrans déformés quand on changes de résolution.
    • Pour les constantes chaines (comme "Erreur de programmation") il serait plus propre de les déclarer dans strings.xml pour gagner dans l'externalisation des constantes et surtout dans l'internationalisation.


    @kolodz Je partage ton avis sur le choix des enums, en plus d'ajouter de la propreté au code, ils ont l'avantage de forcer le typage. Avec les types int rien n'interdit de passer en paramètre 100 à la place des valeurs prédéfinies (1,2, ... et 6) alors qu'avec les enums on est forcé d'utiliser un type SousBois.

  11. #11
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Bonjour,
    Citation Envoyé par kolodz Voir le message
    Un énuméré est un nombre dont les valeurs ont un nom.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public enum SousBoites { SENT, INBOX, DRAFT, UNDELIVERED, FAILED, ALL};
    En interne : sousboite est un int et les valeurs sont des valeurs 1/2/3/4/5.
    Si tu remplace Sousboites par un int (ce qui l'est de tout façon)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public static final int SENT = 1;
    public static final int INBOX = 2;
    public static final int DRAFT =3;
    public static final int UNDELIVERED = 4;
    public static final int FAILED = 5;
    public static final int ALL = 6;
    Et tu réalise ton switch avec ces valeurs.

    Maintenant, dans la plus part des cas la performance gagné par ce genre de codage n'est pas significative. Et il est préférable d'avoir un code propre et compréhensible.
    Il est probable que l'optimisation d'aujourd'hui ne soit plus nécessaire demain, car directement réaliser par la JVM.
    Aujourd'hui on factorise notre code via des fonctions, alors que le code s'exécuterait plus rapidement si on codait tout directement...

    Cordialement,
    Patrick Kolodziejczyk.
    Ok, compris.
    Merci beaucoup pour cette excellente pédagogie.
    Cordialement,
    Christophe Charron

  12. #12
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    Citation Envoyé par _Xavier_ Voir le message
    Je n'ai pas lu tout le code, j'ai juste deux points à souligner :
    [*]width="50dp" : pour les unités des dimensions il vaut mieux utiliser les dip (Density Independant Pixel) pour éviter de voir les écrans déformés quand on changes de résolution.
    ok, merci

    Citation Envoyé par _Xavier_ Voir le message
    [*]Pour les constantes chaines (comme "Erreur de programmation") il serait plus propre de les déclarer dans strings.xml pour gagner dans l'externalisation des constantes et surtout dans l'internationalisation.
    Traditionnellement, c'est quelque chose que je fais en fait de développement car sinon mon petit cerveau ne suit plus et je suis toujours obligé d'aller chercher dans les fichiers de paramètres ce que cela veut dire. Pire, parfois je doublonne le code, pensant avoir oublié quelque chose !!

    Citation Envoyé par _Xavier_ Voir le message
    @kolodz Je partage ton avis sur le choix des enums, en plus d'ajouter de la propreté au code, ils ont l'avantage de forcer le typage. Avec les types int rien n'interdit de passer en paramètre 100 à la place des valeurs prédéfinies (1,2, ... et 6) alors qu'avec les enums on est forcé d'utiliser un type SousBois.
    Cordialement,
    Christophe Charron

  13. #13
    Membre confirmé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 920
    Points : 606
    Points
    606
    Par défaut
    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
    Voici le nouveau code, tenant compte de vos remarques.
     
    string.xml
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    	<string name="numero">Numero</string>
    	<string name="app_name">XsOFtware SMS</string>
    	<string name="message">Message</string>
    	<string name="envoyer">Envoyer</string>
    	<string name="nouveau">Nouvel SMS</string>
    	<string name="liste">Listes des sms</string>
    	<string name="parametre">Paramètres</string>
    	<string name="quitter">Quitter</string>
     
    	<string name="oui">Oui</string>
    	<string name="non">Non</string>
    	<string name="erreur">Erreur : </string>
     
     
     
    	<string name="question_0001">Etes-vous sûr de vouloir quitter l\'application ?</string>
    </resources>
    listexml.xml
    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
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    	android:orientation="vertical" android:layout_width="fill_parent"
    	android:weightSum="1" android:layout_height="wrap_content">
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_01" android:layout_height="wrap_content" android:layout_width="50dip"></TextView>
    		<TextView android:id="@+id/sms_01" android:layout_height="wrap_content" android:layout_width="150dip"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_02" android:layout_height="wrap_content" android:layout_width="50dip"></TextView>
    		<TextView android:id="@+id/sms_02" android:layout_height="wrap_content" android:layout_width="150dip"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_03" android:layout_height="wrap_content" android:layout_width="50dip"></TextView>
    		<TextView android:id="@+id/sms_03" android:layout_height="wrap_content" android:layout_width="150dip"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_04" android:layout_height="wrap_content" android:layout_width="50dip"></TextView>
    		<TextView android:id="@+id/sms_04" android:layout_height="wrap_content" android:layout_width="150dip"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_05" android:layout_height="wrap_content" android:layout_width="50dip"></TextView>
    		<TextView android:id="@+id/sms_05" android:layout_height="wrap_content" android:layout_width="150dip"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_06" android:layout_height="wrap_content" android:layout_width="50dip"></TextView>
    		<TextView android:id="@+id/sms_06" android:layout_height="wrap_content" android:layout_width="150dip"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_07" android:layout_height="wrap_content" android:layout_width="50dip"></TextView>
    		<TextView android:id="@+id/sms_07" android:layout_height="wrap_content" android:layout_width="150dip"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_08" android:layout_height="wrap_content" android:layout_width="50dip"></TextView>
    		<TextView android:id="@+id/sms_08" android:layout_height="wrap_content" android:layout_width="150dip"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_09" android:layout_height="wrap_content" android:layout_width="50dip"></TextView>
    		<TextView android:id="@+id/sms_09" android:layout_height="wrap_content" android:layout_width="150dip"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_10" android:layout_height="wrap_content" android:layout_width="50dip"></TextView>
    		<TextView android:id="@+id/sms_10" android:layout_height="wrap_content" android:layout_width="150dip"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_11" android:layout_height="wrap_content" android:layout_width="50dip"></TextView>
    		<TextView android:id="@+id/sms_11" android:layout_height="wrap_content" android:layout_width="150dip"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_12" android:layout_height="wrap_content" android:layout_width="50dip"></TextView>
    		<TextView android:id="@+id/sms_12" android:layout_height="wrap_content" android:layout_width="150dip"></TextView>
    	</LinearLayout>
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    		android:orientation="horizontal" android:layout_width="fill_parent"
    		android:weightSum="1" android:layout_height="wrap_content">
    		<TextView android:id="@+id/lib_sms_13" android:layout_height="wrap_content" android:layout_width="50dip"></TextView>
    		<TextView android:id="@+id/sms_13" android:layout_height="wrap_content" android:layout_width="150dip"></TextView>
    	</LinearLayout>
    </LinearLayout>
    listexml.java
    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
    import android.app.ListActivity;
    import android.content.Context;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.widget.ListAdapter;
    import android.widget.SimpleCursorAdapter;
    import android.widget.Toast;
     
    public class ListeSms extends ListActivity {
    //	voir les conseils qui ont justifié l'écriture du code de cette manière ici : http://www.developpez.net/forums/d1121531/java/general-java/java-mobiles/android/avis-proprete-code/	
    	private final Context context= ListeSms.this;
    	public static final int SENT = 1;
    	public static final int INBOX = 2;
    	public static final int DRAFT =3;
    	public static final int UNDELIVERED = 4;
    	public static final int FAILED = 5;
    	public static final int ALL = 6;
    	public void onCreate(Bundle savedInstanceState) {
    		try {
    			super.onCreate(savedInstanceState);
    	        //setContentView(R.layout.listessms01); //	surtout pas décommenter cette ligne : il ne faut pas initialiser la fenêtre dans ce cas de listview
    			lectureSMSBoitesSMS(ALL);
    		} catch (Exception e) {
    			Toast.makeText(context, getString(R.string.erreur)+ e, Toast.LENGTH_LONG).show();
    		}
    	}
    	private void lectureSMSBoitesSMS(int genre) {
    		String aParser=null;
    		try {
    			switch (genre) {
    				case SENT:aParser="content://sms/sent";break;
    				case INBOX:aParser="content://sms/inbox";break;
    				case DRAFT:aParser="content://sms/draft";break;
    				case UNDELIVERED:aParser="content://sms/undelivered";break;
    				case FAILED:aParser="content://sms/failed";break;
    				case ALL:aParser="content://sms";break;
    				default :
    					Toast.makeText(context, getString(R.string.erreur)+ genre, Toast.LENGTH_LONG).show();
    			}
    			Toast.makeText(context, aParser, Toast.LENGTH_LONG).show();
    			Uri uriBoiteReceptionSMS = Uri.parse(aParser);
    	    	Cursor curseur = getContentResolver().query(uriBoiteReceptionSMS, null, null, null, null);
    	    	startManagingCursor(curseur);
    //	    	String[] valeurDesColonnes = new String[] { "_id","thread_id","address","person","date","protocol","read","status","type","reply_path_present","subject","body","service_center","locked","error_code","seen" };
    	    	String[] valeurDesColonnes = curseur.getColumnNames();
    	    	int[] vuesQuiAffichentLesValeurs = new int[] { R.id.sms_01,R.id.sms_02,R.id.sms_03,R.id.sms_04,R.id.sms_05,R.id.sms_06,R.id.sms_07,R.id.sms_08,R.id.sms_09,R.id.sms_10,R.id.sms_11,R.id.sms_12,R.id.sms_13};
    	    	ListAdapter adapter = new SimpleCursorAdapter(this, R.layout.listessms01, curseur, valeurDesColonnes, vuesQuiAffichentLesValeurs);
    	    	setListAdapter(adapter);
    	    	//curseur.close(); //	 ce n'est pas le bon moment pour fermer le curseur !!
    		} catch (Exception e) {
    			Toast.makeText(context, getString(R.string.erreur)+ e, Toast.LENGTH_LONG).show();
    		}
        }
    }
    et ça m'a l'air pas mal.

    Merci encore, à tous, pour toutes vos remarques, corrections, suggestions et pédagogie.
    Cordialement,
    Christophe Charron

Discussions similaires

  1. Donnez votre avis sur les articles de Developpez.com
    Par Geronimo dans le forum C++Builder
    Réponses: 13
    Dernier message: 14/01/2007, 22h00
  2. Donnez votre avis sur les articles de Developpez
    Par Anomaly dans le forum Contribuez
    Réponses: 37
    Dernier message: 29/05/2006, 21h48
  3. [Débat] Votre avis sur la section "Dev Web"
    Par Marc Lussac dans le forum Evolutions du club
    Réponses: 31
    Dernier message: 03/03/2004, 20h55

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