didi2204 Posté(e) 27 avril 2013 Share Posté(e) 27 avril 2013 Bonjour à tous ! Je souhaites dans l'avenir développer une application utilisant une base de données que l'utilisateur devra rentrer. Mais je n'en suis pas encore là car je me suis simplement entrainer avec ce tutoriel pour le moment (http://www.ace-art.f...ase-de-donnees/). Je vous explique mon problème, j'ai rajouter une colonne entre la première et la dernière en ajoutant et modifiant toutes les classes et layouts. Cependant, lorsque j'entre la valeur de ma nouvelle colonne (dans un EditText multiligne), dans la liste qui s'affiche, la valeur de ma nouvelle colonne est celle de l'EditText de la première colonne. Je me retrouve alors avec la même valeur mais pas dans la même colonne. J'ai bien pourtant bien cherché, mais je n'ai pas trouvé d'où cela pouvait venir. Je vous laisse alors mes sources ainsi que des captures d'écran pour que vous y jetiez un coup d'oeil afin de trouver la source du problème. Merci d'avance :) package com.aceart.formation.db; import android.app.Activity; import android.app.Dialog; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.MenuItem; import android.view.View; import android.view.View.onclickListener; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import com.aceart.formation.db.adapter.Course; import com.aceart.formation.db.adapter.CourseAdapter; import com.aceart.formation.db.business.CourseRepository; public class FormationDatabaseActivity extends Activity { private ListView listeViewCourse; private Button boutonAjouter; private CourseAdapter adapter; private CourseRepository courseRepository; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Bouton boutonAjouter = (Button) findViewById(R.id.buttonAjouter); boutonAjouter.setonclickListener(new onclickListener() { @Override public void onclick(View v) { AjouterItem(); } }); // Listview listeViewCourse = (ListView) findViewById(R.id.listViewCourse); courseRepository = new CourseRepository(this); courseRepository.Open(); adapter = new CourseAdapter(this, courseRepository.GetAll()); courseRepository.Close(); listeViewCourse.setAdapter(adapter); registerForContextMenu(listeViewCourse); } /** * Ajout d'une produit */ private void AjouterItem() { // Création de la boite de dialogue final Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.dialogadd); dialog.setTitle("Ajouter un produit"); final Button buttonAdd = (Button) dialog.findViewById(R.id.buttonAdd); final Button buttonCancel = (Button) dialog .findViewById(R.id.buttonCancel); buttonAdd.setonclickListener(new onclickListener() { @Override public void onclick(View v) { // Insertion du produit courseRepository.Open(); String Lieu = ((EditText) dialog .findViewById(R.id.lieu)).getText() .toString(); String Desc = ((EditText) dialog .findViewById(R.id.add_descr)).getText() .toString(); int NbKm = Integer.parseInt(((EditText) dialog .findViewById(R.id.km)).getText() .toString()); courseRepository.Save(new Course(Lieu, NbKm, Desc)); courseRepository.Close(); UpdateAdapter(); dialog.dismiss(); } }); buttonCancel.setonclickListener(new onclickListener() { @Override public void onclick(View v) { // Clic sur le bouton annuler dialog.dismiss(); } }); dialog.show(); } private void UpdateAdapter() { courseRepository.Open(); adapter.setCourses(courseRepository.GetAll()); courseRepository.Close(); adapter.notifyDataSetChanged(); } public void UpdateChecked(Course course) { courseRepository.Open(); courseRepository.Update(course); courseRepository.Close(); } public void DeleteItem(int id) { courseRepository.Open(); courseRepository.Delete(id); courseRepository.Close(); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); getMenuInflater().inflate(R.menu.menu_course, menu); } @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item .getMenuInfo(); switch (item.getItemId()) { case R.id.itemDelete: DeleteItem((int) info.id); UpdateAdapter(); return true; default: return super.onContextItemSelected(item); } } } ------------- package com.aceart.formation.db.adapter; /** * Objet Course * @author AcE * */ public class Course { private int id; private String produit; private int quantite; private String desc; private boolean achete; public Course(String produit, int quantite, String desc) { this.produit = produit; this.quantite = quantite; this.desc = desc; this.achete = false; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getProduit() { return produit; } public void setProduit(String produit) { this.produit = produit; } public int getQuantite() { return quantite; } public void setQuantite(int quantite) { this.quantite = quantite; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public boolean isAchete() { return achete; } public void setAchete(boolean achete) { this.achete = achete; } } ------------- package com.aceart.formation.db.adapter; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.TextView; import com.aceart.formation.db.FormationDatabaseActivity; import com.aceart.formation.db.R; public class CourseAdapter extends BaseAdapter { private List<Course> listeCourse; private LayoutInflater inflater; private Context context; public void setCourses(List<Course> listeCourse) { this.listeCourse = listeCourse; } public CourseAdapter(Context context, List<Course> listeCourse) { this.listeCourse = listeCourse; this.context = context; this.inflater = LayoutInflater.from(context); } @Override public int getCount() { return listeCourse.size(); } @Override public Object getItem(int position) { return listeCourse.get(position); } @Override public long getItemId(int position) { return listeCourse.get(position).getId(); } @Override public View getView(final int position, View view, ViewGroup viewGroup) { final ViewHolder holder; if (view == null) { holder = new ViewHolder(); view = inflater.inflate(R.layout.layout_item, null); holder.tvQuantite = (TextView) view .findViewById(R.id.textViewQuantite); holder.tvProduit = (TextView) view .findViewById(R.id.textViewProduit); holder.tvDesc = (TextView) view .findViewById(R.id.textViewDesc); holder.cbAchete = (CheckBox) view .findViewById(R.id.checkBoxAchete); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } holder.tvQuantite.setText(listeCourse.get(position).getQuantite() + ""); holder.tvProduit.setText(listeCourse.get(position).getProduit()); holder.tvDesc.setText((listeCourse).get(position).getDesc()); holder.cbAchete.setChecked(listeCourse.get(position).isAchete()); // Clic sur la check box holder.cbAchete .setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { Course course = listeCourse.get(position); course.setAchete(isChecked); ((FormationDatabaseActivity)context).UpdateChecked(course); } }); return view; } private class ViewHolder { public TextView tvQuantite; public TextView tvProduit; public TextView tvDesc; public CheckBox cbAchete; } } ------------ package com.aceart.formation.db.business; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class CourseOpenHelper extends SQLiteOpenHelper { // Version de la base de données private static final int DATABASE_VERSION = 1; // Nom de la base private static final String COURSE_BASE_NAME = "course02.db"; // Nom de la table public static final String COURSE_TABLE_NAME = "Course"; // Description des colonnes public static final String COLUMN_ID = "ID"; public static final int NUM_COLUMN_ID = 0; public static final String COLUMN_PRODUIT = "PRODUIT"; public static final int NUM_COLUMN_PRODUIT = 1; public static final String COLUMN_QUANTITE = "QUANTITE"; public static final int NUM_COLUMN_QUANTITE = 2; public static final String COLUMN_DESC = "DESC"; public static final int NUM_COLUMN_DESC = 3; public static final String COLUMN_ACHETE = "ACHETE"; public static final int NUM_COLUMN_ACHETE = 4; // Requête SQL pour la création da la base private static final String REQUETE_CREATION_BDD = "CREATE TABLE " + COURSE_TABLE_NAME + " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_PRODUIT + " TEXT NOT NULL, " + COLUMN_QUANTITE + " INTEGER NOT NULL, " + COLUMN_DESC + " TEXT NOT NULL, " + COLUMN_ACHETE + " INTEGER NOT NULL);"; /** * Constructeur * * @param context * @param name * @param factory * @param version */ public CourseOpenHelper(Context context, CursorFactory factory) { super(context, COURSE_BASE_NAME, factory, DATABASE_VERSION); } /** * Création de la base */ @Override public void onCreate(SQLiteDatabase db) { db.execSQL(REQUETE_CREATION_BDD); } /** * Mise à jour de la base */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // Lorsque l'on change le numéro de version de la base on supprime la // table puis on la recrée if (newVersion > DATABASE_VERSION) { db.execSQL("DROP TABLE " + COURSE_TABLE_NAME + ";"); onCreate(db); } } } ----------- package com.aceart.formation.db.business; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import com.aceart.formation.db.adapter.Course; public class CourseRepository extends Repository<Course> { public CourseRepository(Context context) { sqLiteOpenHelper = new CourseOpenHelper(context, null); } /** * Suppression d'un produit * * @param id */ public void DeleteProduit(int id) { maBDD.delete(CourseOpenHelper.COURSE_TABLE_NAME, CourseOpenHelper.COLUMN_ID + "=?", new String[] { String.valueOf(id) }); } /** * Récupération de la liste de tous les produits */ @Override public List<Course> GetAll() { // Récupération de la liste des courses Cursor cursor = maBDD.query(CourseOpenHelper.COURSE_TABLE_NAME, new String[] { CourseOpenHelper.COLUMN_ID, CourseOpenHelper.COLUMN_PRODUIT, CourseOpenHelper.COLUMN_QUANTITE, CourseOpenHelper.COLUMN_DESC, CourseOpenHelper.COLUMN_ACHETE }, null, null, null, null, null); return ConvertCursorToListObject(cursor); } /** * Retourne un seul produit */ @Override public Course GetById(int id) { Cursor cursor = maBDD.query(CourseOpenHelper.COURSE_TABLE_NAME, new String[] { CourseOpenHelper.COLUMN_ID, CourseOpenHelper.COLUMN_PRODUIT, CourseOpenHelper.COLUMN_QUANTITE, CourseOpenHelper.COLUMN_DESC, CourseOpenHelper.COLUMN_ACHETE }, CourseOpenHelper.COLUMN_ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null); return ConvertCursorToObject(cursor); } /** * Enregistre en produit dans la base */ @Override public void Save(Course entite) { ContentValues contentValues = new ContentValues(); contentValues.put(CourseOpenHelper.COLUMN_PRODUIT, entite.getProduit()); contentValues.put(CourseOpenHelper.COLUMN_QUANTITE, entite.getQuantite()); contentValues.put(CourseOpenHelper.COLUMN_DESC, entite.getProduit()); contentValues.put(CourseOpenHelper.COLUMN_ACHETE, entite.isAchete()); maBDD.insert(CourseOpenHelper.COURSE_TABLE_NAME, null, contentValues); } /** * Met à jour un produit */ @Override public void Update(Course entite) { ContentValues contentValues = new ContentValues(); contentValues.put(CourseOpenHelper.COLUMN_PRODUIT, entite.getProduit()); contentValues.put(CourseOpenHelper.COLUMN_QUANTITE, entite.getQuantite()); contentValues.put(CourseOpenHelper.COLUMN_DESC, entite.getProduit()); contentValues.put(CourseOpenHelper.COLUMN_ACHETE, entite.isAchete()); maBDD.update(CourseOpenHelper.COURSE_TABLE_NAME, contentValues, CourseOpenHelper.COLUMN_ID + "=?", new String[] { String.valueOf(entite.getId()) }); } /** * Supprime un produit */ @Override public void Delete(int id) { maBDD.delete(CourseOpenHelper.COURSE_TABLE_NAME, CourseOpenHelper.COLUMN_ID + "=?", new String[] { String.valueOf(id) }); } /** * Converti un curseur en une liste de produits */ @Override public List<Course> ConvertCursorToListObject(Cursor c) { List<Course> liste = new ArrayList<Course>(); // Si la liste est vide if (c.getCount() == 0) return liste; // position sur le premeir item c.moveToFirst(); // Pour chaque item do { Course course = ConvertCursorToObject(c); liste.add(course); } while (c.moveToNext()); // Fermeture du curseur c.close(); return liste; } /** * Méthode utilisée par ConvertCursorToObject et ConvertCursorToListObject */ @Override public Course ConvertCursorToObject(Cursor c) { Course course = new Course( c.getString(CourseOpenHelper.NUM_COLUMN_PRODUIT), c.getInt(CourseOpenHelper.NUM_COLUMN_QUANTITE), c.getString(CourseOpenHelper.NUM_COLUMN_DESC)); course.setId(c.getInt(CourseOpenHelper.NUM_COLUMN_ID)); course.setAchete((c.getInt(CourseOpenHelper.NUM_COLUMN_ACHETE) != 0)); return course; } /** * Converti un curseur en un produit */ @Override public Course ConvertCursorToOneObject(Cursor c) { c.moveToFirst(); Course course = ConvertCursorToObject(c); c.close(); return course; } } -------------- package com.aceart.formation.db.business; import java.util.List; import android.database.Cursor; public interface IRepository<T> { public List<T> GetAll(); public T GetById(int id); public void Save(T entite); public void Update(T entite); public void Delete(int id); public List<T> ConvertCursorToListObject(Cursor c); public T ConvertCursorToObject(Cursor c); public T ConvertCursorToOneObject(Cursor c); } package com.aceart.formation.db.business; import java.util.List; import android.database.Cursor; public interface IRepository<T> { public List<T> GetAll(); public T GetById(int id); public void Save(T entite); public void Update(T entite); public void Delete(int id); public List<T> ConvertCursorToListObject(Cursor c); public T ConvertCursorToObject(Cursor c); public T ConvertCursorToOneObject(Cursor c); } ------------- package com.aceart.formation.db.business; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public abstract class Repository<T> implements IRepository<T> { // Base de données protected SQLiteDatabase maBDD; protected SQLiteOpenHelper sqLiteOpenHelper; /** * Constructeur par défaut */ public Repository() { } /** * Ouverture de la connection */ public void Open() { maBDD = sqLiteOpenHelper.getWritableDatabase(); } /** * Fermeture de la connection */ public void Close() { maBDD.close(); } } -------------- <?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:layout_height="fill_parent" > <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:id="@+id/buttonAjouter" android:text="Ajouter une conduite" android:layout_height="wrap_content" android:layout_width="fill_parent"/> </LinearLayout> <ListView android:id="@+id/listViewCourse" android:layout_height="fill_parent" android:layout_width="fill_parent"></ListView> </LinearLayout> --------------- <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:baselineAligned="true"> <TextView android:layout_width="wrap_content" android:text="0" android:id="@+id/textViewQuantite" android:layout_height="wrap_content" android:padding="5px"></TextView> <TextView android:id="@+id/textViewProduit" android:text="Produit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1"></TextView> <TextView android:id="@+id/textViewDesc" android:text="Desc" android:inputType="textMultiLine" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1"></TextView> <CheckBox android:id="@+id/checkBoxAchete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusable="false" android:focusableInTouchMode="false"></CheckBox> </LinearLayout> ------------- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="match_parent" > <LinearLayout android:id="@+id/lin1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/lieu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="Lieu" /> <EditText android:id="@+id/km" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="4dip" android:width="160sp" android:inputType="numberDecimal" android:imeOptions="actionDone" android:hint="Km" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:id="@+id/lin2" android:layout_below="@+id/lin1"> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="-------" android:textColor="#5AC2DC" android:textSize="20dp" /> <EditText android:id="@+id/add_descr" android:layout_width="fill_parent" android:layout_height="wrap_content" android:cursorVisible="true" android:hint="Description du trajet(Manoeuvres effectuées, Impressions,...). /nPS:Eviter les accents pour permttre une meilleure exportation CSV" android:inputType="textMultiLine" > <requestFocus /> </EditText> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="-------" android:textColor="#5AC2DC" android:textSize="20dp" /> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/lin2"> <Button android:text="Ajouter" android:id="@+id/buttonAdd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1"> </Button> <Button android:text="Annuler" android:id="@+id/buttonCancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1"> </Button> </LinearLayout> </RelativeLayout> Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 29 avril 2013 Share Posté(e) 29 avril 2013 Dans ta classe CourseRepository, dans les méthodes Save et Update, tu sauvegardes le nom du produit dans la colonne description, au lieu d'y sauvegarder la description... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
didi2204 Posté(e) 29 avril 2013 Auteur Share Posté(e) 29 avril 2013 (modifié) Henn oui !! Je me suis vraiment mal relu alors :) Merci beaucoup de ton aide, ca fonctionne. SUJET RESOLU :D Modifié 29 avril 2013 par didi2204 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.