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 de ListView avec une ArrayList d'objets [Débutant(e)]


Sujet :

Composants graphiques Android

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Problème de ListView avec une ArrayList d'objets
    Bonjour,

    J'ai un problème pour afficher une arraylist d'objet qui est stocké dans sqlite, et je n'arrive pas à trouver l'erreur.


    Mon activité:
    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
    public class ListeTests extends Activity {
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.liste_tests);
    		ListView lv = (ListView)findViewById(R.id.listetest);
    		ArrayList<Test> test = null;
    		String lv_arr [] = {};
     
    		ArrayAdapter<String> allTests;
    		try {
    			test = DBManager.sharedManager().getAllTests();
    		} catch (ParseException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		lv_arr = test.toArray(new String[test.size()]);
    		allTests = new ArrayAdapter<String> (ListeTests.this, android.R.layout.simple_list_item_1, lv_arr);
    		lv.setAdapter(allTests);
     
     
    		//setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
     
    		final Button Button = (Button) findViewById(R.id.button2);
    		Button.setOnClickListener(new OnClickListener() {
     
    			public void onClick(View v) {
    				Intent intent = new Intent(ListeTests.this, AjouterTest.class);
    				startActivity(intent);
    			}
    		});
    	}
     
    }
    Ma classe test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    public class Test {
     
    	private Long id;
    	private Long idActivite;
    	private String nom;
    	private String client;
    	private String reference;
    	private String detail;
    	private String nomActivite;
    	private Date dateDebut;
    	private Date dateFin;
     
    	public Test (){
     
    	}
     
    	public String getNomActivite() {
    		return nomActivite;
    	}
     
    	public void setNom_Activite(String nomActivite) {
    		this.nomActivite = nomActivite;
    	}
     
    	public Long getId() {
    		return id;
    	}
     
    	public void setId(Long id) {
    		this.id = id;
    	}
     
    	public String getNom() {
    		return nom;
    	}
     
    	public Long getIdActivite() {
    		return idActivite;
    	}
     
    	public void setIdActivite(Long idActivite) {
    		this.idActivite = idActivite;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public String getClient() {
    		return client;
    	}
     
    	public void setClient(String client) {
    		this.client = client;
    	}
     
    	public String getReference() {
    		return reference;
    	}
     
    	public void setReference(String reference) {
    		this.reference = reference;
    	}
     
    	public String getDetail() {
    		return detail;
    	}
     
    	public void setDetail(String detail) {
    		this.detail = detail;
    	}
     
     
    	public Date getDateDebut() {
    		return dateDebut;
    	}
     
    	public void setDateDebut(Date dateDebut) {
    		this.dateDebut = dateDebut;
    	}
     
    	public Date getDateFin() {
    		return dateFin;
    	}
     
    	public void setDateFin(Date dateFin) {
    		this.dateFin = dateFin;
    	}
     
    }
    Ma fonction pour sqlite :
    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
    	public ArrayList<Test> getAllTests() throws ParseException{
    		if (db == null)
    		{
    		this.databaseHelper.getReadableDatabase();
    	}
    		String[] cols = {"_id","nom","client"};
    		ArrayList<Test> listeTest = new ArrayList<Test> ();
    		Cursor c = db.query("test", cols, null, null, null, null, null);
    		while (c.moveToNext ())
    		{	
    			Long id = c.getLong(c.getColumnIndex("_id"));
    			String nom = c.getString(c.getColumnIndex("nom"));
    			String client = c.getString(c.getColumnIndex("client"));
     
    			Test t = new Test();
    			t.setId(id);
    			t.setNom(nom);
    			t.setClient(client);
     
    			listeTest.add(t);
    		}
    		c.close ();
    		return listeTest;
     
    	}
    J'ai vérifié que mon arraylist était bien rempli en mode debug, mais quand elle arrive au niveau de l'array adapter, j'ai plusieurs erreurs.

    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
    08-23 10:42:29.224: E/AndroidRuntime(2697): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.application.feeltest/com.application.feeltest.activity.ListeTests}: java.lang.ArrayStoreException
    08-23 10:42:29.224: E/AndroidRuntime(2697): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
    08-23 10:42:29.224: E/AndroidRuntime(2697): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
    08-23 10:42:29.224: E/AndroidRuntime(2697): 	at android.app.ActivityThread.access$2300(ActivityThread.java:125)
    08-23 10:42:29.224: E/AndroidRuntime(2697): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
    08-23 10:42:29.224: E/AndroidRuntime(2697): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    08-23 10:42:29.224: E/AndroidRuntime(2697): 	at android.os.Looper.loop(Looper.java:123)
    08-23 10:42:29.224: E/AndroidRuntime(2697): 	at android.app.ActivityThread.main(ActivityThread.java:4627)
    08-23 10:42:29.224: E/AndroidRuntime(2697): 	at java.lang.reflect.Method.invokeNative(Native Method)
    08-23 10:42:29.224: E/AndroidRuntime(2697): 	at java.lang.reflect.Method.invoke(Method.java:521)
    08-23 10:42:29.224: E/AndroidRuntime(2697): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    08-23 10:42:29.224: E/AndroidRuntime(2697): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    08-23 10:42:29.224: E/AndroidRuntime(2697): 	at dalvik.system.NativeStart.main(Native Method)
    08-23 10:42:29.224: E/AndroidRuntime(2697): Caused by: java.lang.ArrayStoreException
    08-23 10:42:29.224: E/AndroidRuntime(2697): 	at java.lang.System.arraycopy(Native Method)
    08-23 10:42:29.224: E/AndroidRuntime(2697): 	at java.util.ArrayList.toArray(ArrayList.java:523)
    08-23 10:42:29.224: E/AndroidRuntime(2697): 	at com.application.feeltest.activity.ListeTests.onCreate(ListeTests.java:35)
    08-23 10:42:29.224: E/AndroidRuntime(2697): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    08-23 10:42:29.224: E/AndroidRuntime(2697): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
    J'ai entendu parlé d'overide la méthode toString mais je ne sais pas vraiment comment m'y prendre.
    Merci d'avance

    Cordialement
    Johan.P

  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
    Même avec la fonction toString() ca ne marchera pas....

    Je conseille de reserver toString() à son utilité principale: une conversion de l'objet en string, pas un simple texte d'affichage....

    Là il va y avoir un problème de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ArrayList<Test> test
    lv_arr = test.toArray(new String[test.size()]);
    toArray attends une array d'objets "Test" pas de String...
    Donc il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    lv_arr = new String[test.size()];
    int idx = 0;
    for (Test t : test) { lv_arr[idx++] = convertToString(t); }
    Par contre, attention au nom des variables... "test" pour une liste d'objets de type "Test" c'est chaud chaud ! "lv" et "lv_arr" aussi d'ailleurs... "allTests" aussi d'ailleurs (on s'attends à ce que ce soit ca la liste de Test !!)

    "allTests" (pour 'test'), "listView", "listViewStrings" et "listViewAdapter" sont par exemple plus explicites (c'est pas comme il y a 10 ans quand il n'y avait pas d'auto complétion dans les IDEs).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

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

Discussions similaires

  1. Problème avec une ArrayList
    Par dutty_pi dans le forum JDBC
    Réponses: 2
    Dernier message: 22/03/2012, 07h37
  2. Problème remplissage hauteur avec une ListView et style des cellules
    Par Takumi dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 20/07/2010, 11h42
  3. problème d'assignation avec une ArrayList
    Par Steph1904 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 10/06/2009, 22h37
  4. Remplir une ListView avec une BD
    Par manikou dans le forum MFC
    Réponses: 1
    Dernier message: 17/05/2005, 09h48
  5. Problèmes d'accent avec une connexion ODBC et ADO
    Par michael.jacques dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/03/2005, 15h36

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