starship13
-
Modifié le 10 mai 2021 à 09:47
BunoCS
Messages postés15505Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention 5 février 2025
-
10 mai 2021 à 09:57
Bonjour,
Nous sommes en train de coder une application de co-voiturage qui est relié à une base de données.
Mais nous avons un problème car aucune donnée ne s'affiche dans notre listview et nous ne comprenons pas pourquoi.
Voici les deux classes dans lesquelles nous avons fait ça.
Merci d'avance et bonne journée !
Classe pour ajouter une annonce :
package com.example.sousletoitdematesla;import android.content.SharedPreferences;import android.os.Bundle;import android.text.Editable;import android.text.TextWatcher;import android.view.View;import android.widget.Button;import android.widget.EditText;import androidx.appcompat.app.AppCompatActivity;import com.google.gson.Gson;import java.util.ArrayList;import java.util.Arrays;publicclassAjouterAnnonceextends AppCompatActivity {ButtonBoutonPublierAnnonce;EditTextDépart ;EditTextArrivée ;EditTextDate ;EditTextHeureDeDépart ;EditTextHeureDArrivée ;EditTextNbDePassagers ;StringDépartInput;StringArrivéeInput;StringDateInput;StringHeureDeDépartInput;StringHeureDArrivéeInput;StringNbDePassagersInput;ArrayList<Annonce>listeannonces;
@Override
protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_ajouter_annonce);
Départ =findViewById(R.id.Départ);
Arrivée =findViewById(R.id.Arrivée);
Date =findViewById(R.id.Date);
HeureDeDépart =findViewById(R.id.HeureDeDépart);
HeureDArrivée =findViewById(R.id.HeureDArrivée);
NbDePassagers =findViewById(R.id.NbDePassagers);
Départ.addTextChangedListener(AnnonceTextWatcher);
Arrivée.addTextChangedListener(AnnonceTextWatcher);
Date.addTextChangedListener(AnnonceTextWatcher);
HeureDeDépart.addTextChangedListener(AnnonceTextWatcher);
HeureDArrivée.addTextChangedListener(AnnonceTextWatcher);
NbDePassagers.addTextChangedListener(AnnonceTextWatcher);
BoutonPublierAnnonce =(Button)findViewById(R.id.BoutonPublierAnnonce);
BoutonPublierAnnonce.setEnabled(false);
BoutonPublierAnnonce.setOnClickListener(new View.OnClickListener(){
@Override
publicvoidonClick(Viewv){SharedPreferencesprefsStockees =getSharedPreferences("mesPrefs", MODE_PRIVATE);Gsongson =newGson();// on crée un gestionnaire de format json// on extrait la liste referencée par le mot cle_listeEtudiants qu'on avait stocké dans les// préférences partagéesStringlisteAnnoncesTxtJson = prefsStockees.getString("cle_listeAnnonces","");// desormais dans listeEtudiantsTxtJson on a tous nos etudiants stockés dans un format json// on reconstruit un tableau d'objets de type étudiants grace à al liste au format jsonif(listeAnnoncesTxtJson.equals("")){
listeannonces =new ArrayList<Annonce>();}else{
Annonce[] tableauEtudiantsTemporaire = gson.fromJson(listeAnnoncesTxtJson, Annonce[].class);// reconstitution d'une arrayList a partir du tableau tableauEtudiantsTemporaire
listeannonces =new ArrayList<Annonce>(Arrays.asList(tableauEtudiantsTemporaire));}Stringdepart = Départ.getText().toString();Stringarrivee = Arrivée.getText().toString();Stringdate = Date.getText().toString();Stringheurededepart = HeureDeDépart.getText().toString();Stringheuredarrivee = HeureDArrivée.getText().toString();Stringnbdepassagers = NbDePassagers.getText().toString();AnnonceannonceAjout =newAnnonce(depart, arrivee, date, heurededepart, heuredarrivee, nbdepassagers);
listeannonces.add(annonceAjout);/** enregistrement de la liste dans "SharedPreferences" */// on cree un éditeur de préferences, pour mettre à jour "mesPrefs" :
SharedPreferences.EditorprefsEditor = prefsStockees.edit();// on transforme la liste d'étudiant en format json :StringListeEtudiantsEnJson = gson.toJson(listeannonces);// on envoie la liste (json) dans la clé cle_listeEtudiants de mesPrefs :
prefsEditor.putString("cle_listeEtudiants", ListeEtudiantsEnJson);
prefsEditor.commit();// on enregistre les préférences//Toast.makeText(AjouterAnnonce.this, "vous avez ajouté votre annonce !", Toast.LENGTH_SHORT).show();finish();// on ferme l'activite et on revient à l'activite precedente//Intent i = new Intent(AjouterAnnonce.this, ListeAnnonces.class);//startActivity(i);}});}privateTextWatcherAnnonceTextWatcher =newTextWatcher(){
@Override
publicvoidbeforeTextChanged(CharSequences,int start,int count,int after){}
@Override
publicvoidonTextChanged(CharSequences,int start,int before,int count){
DépartInput = Départ.getText().toString().trim();
ArrivéeInput = Arrivée.getText().toString().trim();
DateInput = Date.getText().toString().trim();
HeureDeDépartInput = HeureDeDépart.getText().toString().trim();
HeureDArrivéeInput = HeureDArrivée.getText().toString().trim();
NbDePassagersInput = NbDePassagers.getText().toString().trim();
BoutonPublierAnnonce.setEnabled(!DépartInput.isEmpty()&&!ArrivéeInput.isEmpty()&&!DateInput.isEmpty()&&!HeureDeDépartInput.isEmpty()&&!HeureDArrivéeInput.isEmpty()&&!NbDePassagersInput.isEmpty());}
@Override
publicvoidafterTextChanged(Editables){}};}
Classe de la liste d'annonce :
package com.example.sousletoitdematesla;import android.content.Intent;import android.content.SharedPreferences;import android.graphics.Color;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import com.google.gson.Gson;import java.util.ArrayList;import java.util.Arrays;publicclassListeAnnoncesextends AppCompatActivity {ButtonBoutonAjouterAnnonce;ArrayList<Annonce>listeannonces;
@Override
protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_liste_annonces);SharedPreferencesprefsStockees =getSharedPreferences("mesPrefs", MODE_PRIVATE);Gsongson =newGson();// on crée un gestionnaire de format json// on extrait la liste referencée par le mot cle_listeEtudiants qu'on avait stocké dans les// préférences partagéesStringlisteAnnonceTxtJson = prefsStockees.getString("cle_listeAnnonces","");// desormais dans listeEtudiantsTxtJson on a tous nos etudiants stockés dans un format json// on reconstruit un tableau d'objets de type étudiants grace à al liste au format jsonif(listeAnnonceTxtJson.equals("")){
listeannonces =new ArrayList<Annonce>();}else{
Annonce[] tableauAnnoncesTemporaire = gson.fromJson(listeAnnonceTxtJson, Annonce[].class);// reconstitution d'une arrayList a partir du tableau tableauEtudiantsTemporaire
listeannonces =new ArrayList<Annonce>(Arrays.asList(tableauAnnoncesTemporaire));}BaseAdaptercustomBaseAdapter =newBaseAdapter(){// Return list view item count.
@Override
// a la question "combien d'éléments as-tu ?" on va fournir comme réponse la taille de la listeEtudiants.publicintgetCount(){return listeannonces.size();}
@Override
publicObjectgetItem(int i){// getItem doit renvoyer l'item qui est associé à l'éléméent de liste d'indice i// on renvoie simplement le i^eme elemnt de listeEtudiant, car la listview doit etre// etre synchronisée avec listeEtudiantsreturn listeannonces.get(i);}
@Override
publiclonggetItemId(int i){return i;}
@Override
publicViewgetView(finalint itemIndex,ViewitemView,ViewGroupviewGroup){
Toast.makeText(ListeAnnonces.this,"vous avez cliqué sur ", Toast.LENGTH_SHORT).show();/** C'est ici que ca devient difficile : on va construire un affichage pour chaque item* on a la fonction getView qui indique comment on doit constuire l'affichage de l'item* numero 'itemIndex', en construisant la vue 'itemView'. Avec l'info du premier paramètre, on va* construire le second. On considere donc ici qu'on ne construit l'affichage que pour 1 item**/if(itemView ==null){// on va creer une case réponse (une ligne du listview ) avec un modele défini dans le fichier// xml main_activity_base_adapter
itemView = LayoutInflater.from(ListeAnnonces.this).inflate(R.layout.cadre_item_de_liste,null);}// On récupere les 3 cases (image + zone identite + zone age de ce modele)// on va les remplir par la suite avec les valeurs à affcher pour cette ligne//ImageView imageView = (ImageView) itemView.findViewById(R.id.baseUserImage);//TextView txt_annonce_nomprenom = (TextView) itemView.findViewById(R.id.txt_nom_prenom);TextViewtxt_annonce_date_heures =(TextView) itemView.findViewById(R.id.txt_date_heures);TextViewtxt_annonce_nbpassagers =(TextView) itemView.findViewById(R.id.txt_nbpassagers);TextViewtxt_annonce_depart_arrivee =(TextView) itemView.findViewById(R.id.txt_depart_arrivee);// on alterne la couleur du fondint colorPos = itemIndex %2;if(colorPos ==0){
itemView.setBackgroundColor(Color.parseColor("#FFFFFF"));}else{
itemView.setBackgroundColor(Color.parseColor("#FFFFFF"));}// on lit les valeur des ressources par rapport à listeetudiantsAnnonceannonceAafficher =(Annonce) listeannonces.get(itemIndex);//imageView.setImageResource(R.mipmap.ic_launcher);//final String nom = etudiantAafficher.Nom;//final String prenom = etudiantAafficher.Prénom;finalStringdate = annonceAafficher.Date;finalStringdepart = annonceAafficher.Départ;finalStringarrivee = annonceAafficher.Arrivée;finalStringnbdepassagers = annonceAafficher.NbDePassagers;finalStringheurededepart = annonceAafficher.HeureDeDépart;finalStringheuredarrivee = annonceAafficher.HeureDArrivée;// on les insère dans les champs correspondants//txt_annonce_nomprenom.setText(prenom + " " + nom);
txt_annonce_depart_arrivee.setText("De "+ depart +" à "+ arrivee);
txt_annonce_date_heures.setText("Le"+ date +" de "+ heurededepart +" à "+ heuredarrivee);
txt_annonce_nbpassagers.setText("Nombre de places : "+ nbdepassagers);/** que se passe-t'il si on click sur l'item en entier (itemView)?* on va simplement lancer l'activité Voiretudiant en lui passant un parametre :* l'index de l'étudiant cliqué* *//*itemView.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { // on affiche un petit message de type Toast, qui arrivera aussi sur l'autre activite //Toast.makeText(ListeAnnonces.this, "vous avez cliqué sur " + prenom + " " + nom, Toast.LENGTH_SHORT).show(); // on crée la nouvelle activite Intent intent = new Intent(ListeAnnonces.this, VoirAnnonce.class); // on lui passe un parametre : indexEtudiantClique, qui sera l'index de l'item cliqué intent.putExtra("indexAnnonceClique", itemIndex); startActivity(intent); // lancement de l'activité } });*/// on termine la méthode surchargée en renvoyant la view crééereturn itemView;}};// de retour dans la methode onCreate : on récupere enfin la listView pour affichageListViewlv_Annonces =(ListView)findViewById(R.id.Liste_View_Annonces);// on l'associe au customAdapter. et voila
lv_Annonces.setAdapter(customBaseAdapter);
BoutonAjouterAnnonce =(Button)findViewById(R.id.BoutonAjouterAnnonce);
BoutonAjouterAnnonce.setOnClickListener(new View.OnClickListener(){
@Override
publicvoidonClick(Viewview){Intenti =newIntent(ListeAnnonces.this, AjouterAnnonce.class);//i.putExtra("key", value); Optimal parameterstartActivity(i);}});}}
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ICI