Bonjour,

Je réalise une appli qui insère des données dans une base de données contenu dans un fichier XML et ensuite qui doit les afficher dans un listview. J'ai réussi à insérer les données dans la base mais le problème maintenant c'est que je n'arrive pas à les afficher dans le listView. Je dois avoir:
Client
Adresse
nombre colis montant total
Voici mes classes:
package http:
classe LitFichier:
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
public class LitFichier extends AsyncTask<String, Void, Boolean>{
 
	private List<Livraison> lesLivraisons;
 
	@Override
	protected Boolean doInBackground(String... urls) {
		URL url;
		try {
			url = new URL(urls[0]);
			MaSaxHandler handler = new MaSaxHandler();
			InputStream inputStream;
			inputStream = url.openConnection().getInputStream();
 
			handler.parse(inputStream);
	        lesLivraisons = handler.getLesLivraisons();
 
	        return true;
		} catch (MalformedURLException e) {
			return false;
		} catch (IOException e) {
			return false;
		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
 
	public List<String> donneLivraisons(){
		List<String> liste = new ArrayList<String>();
		for (Livraison livraison : lesLivraisons)
			liste.add(livraison.toString());
		return liste;
	}
 
	public List<Livraison> getLivraisons(){
		List<Livraison> liste = new ArrayList<Livraison>();
		for (Livraison livraison : lesLivraisons)
			liste.add(livraison);
		return liste;
	}
}
package xml:
MaSaxHandler:
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
public class MaSaxHandler extends DefaultHandler {
 
	   private Livraison livraison;
	   private List<Livraison> lesLivraisons = new ArrayList<Livraison>();
	   private Colis colis;
	   private String valeur;
 
	   public void parse(InputStream is) throws ParserConfigurationException, SAXException, IOException{
		   SAXParserFactory factory = SAXParserFactory.newInstance();
		   SAXParser parser=factory.newSAXParser();
		   parser.parse(is,this);
	   }
	   public void startElement( String uri, String localName, String qName, Attributes attributes)
			   throws SAXException {
		   if (localName.equals("livraison"))  livraison = new Livraison();
		   if (localName.equals("colis")) colis = new Colis();
	   }
	   public void characters(char[] ch,int start, int length) throws SAXException{
			valeur = new String(ch,start,length);
		}
	   public void endElement( String uri, String localName,String qName) throws SAXException {
	        if (localName.equals("livraison")) {
	        	lesLivraisons.add(livraison);
	        }else if (localName.equals("client")){
	        	livraison.setClient(valeur);
	        }else if (localName.equals("adresse")){
	        	livraison.setAdresse(valeur);
	        }else if (localName.equals("colis")){
	        	livraison.addColis(colis);
	        }else if (localName.equals("ref")){
	        	colis.setRef(valeur);
	        }else if (localName.equals("montant")){
	        	double monLong= Double.parseDouble(valeur);
	        	colis.setMontant(monLong);
	        }
	    }
	   public List<Livraison> getLesLivraisons() {
		   return lesLivraisons;
	   }
}
package métier:
classe Livraison:
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
public class Livraison {
 
	private long id = 0;
	private String client;
	private String adresse;
	private List<Colis> lesColis;
 
	public Livraison(String client, String adresse) {
		this.client = client;
		this.adresse = adresse;
	}
 
	public Livraison(){
		super();
		lesColis = new ArrayList<Colis>();
	}
 
	public long getId(){
		return id;
	}
 
	public String getClient(){
		return client;
	}
 
	public String getAdresse(){
		return adresse;
	}
 
	public List<Colis> getLesColis(){
		return lesColis;
	}
 
	public void setLesColis(List<Colis> lesColis){
		this.lesColis = lesColis;
	}
 
	public void setClient(String client) {
		this.client = client;
	}
 
	public void setAdresse(String adresse) {
		this.adresse = adresse;
	}
 
	public void addColis(Colis unColis){
		lesColis.add(unColis);
	}
 
	public String toString(){
		String chaine = "Livraison : client : "+client+" => adresse : "+adresse+" \nLes colis :";
		for (Colis unColis : lesColis){
			chaine = chaine + "\n"+unColis.toString();		
		}
		return chaine;
	}
}
classe Colis:
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
public class Colis {
 
	private String ref;
	private double montant;
	private long idLivraison;
 
	public Colis(long idLivraison, double montant, String ref) {
		super();
		this.idLivraison = idLivraison;
		this.montant = montant;
		this.ref = ref;
	}
 
	public Colis(){
		super();
	}
 
	public double getMontant() {
		return montant;
	}
 
	public long getIdLivraison() {
		return idLivraison;
	}
 
	public String getRef(){
		return ref;
	}
 
	public void setIdLivraison(long id){
		this.idLivraison = id;
	}
 
	public void setRef(String ref) {
		this.ref = ref;
	}
 
	public void setMontant(double montant) {
		this.montant = montant;
	}
 
	public String toString(){
		return "Colis : référence : "+ref+" => montant : "+montant;
	}
}
classe GestionBD:
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
public class GestionBD {
	private SQLiteDatabase maBase;
	private BdHelper monBdHelper;
 
	public GestionBD(Context context) {
 
		monBdHelper = new BdHelper(context, "baseLivraison", null, 1);
	}
 
	public void open(){
		maBase = monBdHelper.getWritableDatabase();
	}
 
	public void init(List<Livraison> lesLivraisons){
		open();
		supprimeColis();
		supprimeLivraisons();
 
		try{
 
			for (Livraison l : lesLivraisons){
				Livraison livraisonACreer = new Livraison(); 
				livraisonACreer.setClient(l.getClient());
				livraisonACreer.setAdresse(l.getAdresse());
				long id;
				id = ajouteLivraison(livraisonACreer);
 
				List<Colis> listeColis = l.getLesColis();
				for (Colis c : listeColis){
					Colis colisACreer = new Colis();
					colisACreer.setIdLivraison(id);
					colisACreer.setRef(c.getRef());
					colisACreer.setMontant(c.getMontant());
					ajouteColis(colisACreer);
				}
			}
		}
		catch(Exception e){
			e.printStackTrace(); 
		}
	}
 
	public void close(){
		maBase.close();
	}
	public long ajouteLivraison(Livraison livraison){
		ContentValues v = new ContentValues();
		v.put("client", livraison.getClient());
		v.put("adresse", livraison.getAdresse());
		return maBase.insert("livraison", null, v);
	}
	public void ajouteColis(Colis colis){
		ContentValues v = new ContentValues();
		v.put("idlivraison", colis.getIdLivraison());
		v.put("ref", colis.getRef());
		v.put("montant", colis.getMontant());
		maBase.insert("colis", null, v);
	}
 
 
	public void supprimeLivraisons(){
		maBase.delete("livraison", null, null);
	}
 
	public void supprimeColis(){
		maBase.delete("colis", null, null);
	}
 
	public ArrayList<String> donneInfo(){
		ArrayList<String> liste = new ArrayList<String>();
		Cursor c = maBase.rawQuery("select client, adresse, count(*) as nbColis, sum(montant) as montant from livraison" +
				" left outer join colis on id=idlivraison group by id order by client",null);
		while (c.moveToNext()) liste.add(c.getString(0)+" "+c.getString(1)+" "+c.getString(2)+" "+c.getDouble(3));
		return liste;
	}
}
classe BdHelper:
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
public class BdHelper extends SQLiteOpenHelper {
 
	public BdHelper(Context context, String name, CursorFactory factory,
			int version) {
		super(context, name, factory, version);
		// TODO Auto-generated constructor stub
	}
	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		String req = "create table livraison(id integer primary key autoincrement, client text, adresse text)";
		db.execSQL(req);
		req = "create table colis(ref text, montant real, idlivraison integer, foreign key (idlivraison) references livraison(id))";
		db.execSQL(req);
	}
 
 
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
	}
}
Activité principal:
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
public class MainActivity extends Activity implements OnItemClickListener {
 
	private ListView listView;
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
 
		GestionBD gestionBD = new GestionBD(this);
 
		LitFichier litFichier = new LitFichier();
		litFichier.execute("http://192.168.1.16/livraisons.xml");
 
		try {
			if (litFichier.get())
			{	
				gestionBD.init(litFichier.getLivraisons());
 
				listView = (ListView) findViewById(R.id.listView1);
 
				for (String ligne : gestionBD.donneInfo()){
					SimpleAdapter adapter = new SimpleAdapter(this, ligne, R.layout.liste_client,
							new String[] { "client", "adresse", "nbColis" ,"montant"},
							new int[] {R.id.client, R.id.adresse, R.id.nbColis, R.id.mtColis });
 
					listView.setAdapter(adapter);
					listView.setOnItemClickListener(this);
				}
 
 
 
 
				for (String ligne : gestionBD.donneInfo()) Log.i("bd", ligne);
 
			}		
			else
				Log.i("lithttp", "Problème lecture fichier");
		} catch (InterruptedException e) {
			Log.i("lithttp", "Interruption lecture fichier");
		} catch (ExecutionException e) {
			Log.i("lithttp", "Problème exécution");
		}
	}
 
	@SuppressWarnings("unchecked")
	@Override
	public void onItemClick(AdapterView<?> parent, View view, int position, long id) {		
		Toast.makeText(MainActivity.this, "cliqué sur "+
				((HashMap<String, String>) listView.getAdapter().getItem(position)).get("client"),
				Toast.LENGTH_SHORT).show();
	}	
 
}
C'est ici que je bloque:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
				for (String ligne : gestionBD.donneInfo()){
					SimpleAdapter adapter = new SimpleAdapter(this, ligne, R.layout.liste_client,
							new String[] { "client", "adresse", "nbColis" ,"montant"},
							new int[] {R.id.client, R.id.adresse, R.id.nbColis, R.id.mtColis });
 
					listView.setAdapter(adapter);
					listView.setOnItemClickListener(this);
				}
Merci de votre aide