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:
package 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 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; } }
MaSaxHandler:
package métier:
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; } }
classe Livraison:
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
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 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 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 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
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; } }
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 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 } }
C'est ici que je bloque:
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(); } }
Merci de votre aide
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); }
Partager