Jump to content

[Résolu] Soucis ajout contenu EditText dans colonne SQL


Recommended Posts

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>

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...