loverius Posté(e) 13 mai 2014 Share Posté(e) 13 mai 2014 (modifié) bonjour je suis étudiant en informatique et je dois remettre mon projet pour vendredi. tout d'abord un grand merci a toutes personnes qui saura m'aider :) j'ai dans une bdd une collone lieu une collone date et une collone description le bute est de tout recuperer dans une map pour ensuite ladapter au listvieuw. public ArrayList<HashMap<String, String>> openAndQueryDatabase() { try { Cursor c = bdd.rawQuery("SELECT lieu, date,description FROM " + TABLE_EVENT , null); if (c != null ) { if (c.moveToFirst()) do { String lieu = c.getString(c.getColumnIndex("Lieu")); String date = c.getString(c.getColumnIndex("Date")); String description = c.getString(c.getColumnIndex("Description")); map = new HashMap<String, String>(); map.put("lieu", lieu); map.put("date", date); map.put("description", description); map.put("img", String.valueOf(R.drawable.ic_launcher)); listItem.add(map); } while (c.moveToNext()); } } catch (SQLiteException se ) { Log.e(getClass().getSimpleName(), "Could not create or Open the database"); } finally { if (bdd != null) bdd.execSQL("DELETE FROM " + TABLE_EVENT); bdd.close(); } return listItem; } je recupere ce "listItem" dans mon Myactivity et ensuite je ladapte au listvieuw l'adaptation fonctionne avec un autre listitem l'erreur dois ce trouver dans la fonction openAndQueryDatabase() listItem2= e.openAndQueryDatabase(); SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), listItem2, R.layout.events, new String[] {"img", "titre","date", "description"}, new int[] {R.id.img, R.id.titre,R.id.date, R.id.description}); maListViewPerso.setAdapter(mSchedule); ca me retourne une erreur : 05-13 05:03:20.008 1693-1693/com.example.FMP E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.example.FMP, PID: 1693 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.FMP/com.example.FMP.MyActivity}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) at android.app.ActivityThread.access$800(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at com.example.FMP.EventBDD.openAndQueryDatabase(EventBDD.java:156) at com.example.FMP.MyActivity.onCreate(MyActivity.java:74) at android.app.Activity.performCreate(Activity.java:5231) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) at android.app.ActivityThread.access$800(ActivityThread.java:135) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method) 05-13 05:03:23.508 1693-1693/com.example.FMP I/Process﹕ Sending signal. PID: 1693 SIG: 9 Modifié 13 mai 2014 par loverius Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lannig Posté(e) 13 mai 2014 Share Posté(e) 13 mai 2014 Bonsoir, Les règles du forum demandent de ne pas faire de relance / de up à moins de 24h d'intervalle, merci. [un message supprimé] Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 14 mai 2014 Share Posté(e) 14 mai 2014 Bonjour, Comme te l'indique la stacktrace, tu as un NullPointerException en ligne 156 de ton fichier EventBDD.java. Tu dois probablement utiliser un objet qui n'a pas été initialisé.... 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
loverius Posté(e) 14 mai 2014 Auteur Share Posté(e) 14 mai 2014 Merci beaucoup chpil ! je suis actuellement en cours d'ai que je rentre chez moi j’observe cette ligne 156. si je ne trouve pas je me permettrais de t'envoyé mon EventBDD.java. encore merci :) max Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
loverius Posté(e) 14 mai 2014 Auteur Share Posté(e) 14 mai 2014 Bonjour, Comme te l'indique la stacktrace, tu as un NullPointerException en ligne 156 de ton fichier EventBDD.java. Tu dois probablement utiliser un objet qui n'a pas été initialisé.... après avoir chipoter quelque heures je n'ai plus d'erreur mais mon listvieuw n'affiche rien . voila le code de mon EventBDD package com.example.FMP; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.util.Log; import android.widget.ListView; import java.util.ArrayList; import java.util.HashMap; /** * Created by maxime on 12/05/2014. */ public class EventBDD { private ListView maListViewPerso; //Création de la ArrayList qui nous permettra de remplire la listView private ArrayList<String> results = new ArrayList<String>(); ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>(); //On déclare la HashMap qui contiendra les informations pour un item HashMap<String, String> map; //On déclare la HashMap qui contiendra les informations pour un item private static final int VERSION_BDD = 1; private static final String NOM_BDD = "eleves.db"; private static final String TABLE_EVENT = "table_event"; private static final String COL_ID = "ID"; private static final int NUM_COL_ID = 0; private static final String COL_Lieu = "Lieu"; private static final int NUM_COL_Lieu = 1; private static final String COL_Date = "Date"; private static final int NUM_COL_Date = 2; private static final String COL_Description = "Description"; private static final int NUM_COL_Description = 3; private SQLiteDatabase bdd; private MaBaseSQLite maBaseSQLite; public EventBDD(Context context){ //On créer la BDD et sa table maBaseSQLite = new MaBaseSQLite(context, NOM_BDD, null, VERSION_BDD); } public void open(){ //on ouvre la BDD en écriture bdd = maBaseSQLite.getWritableDatabase(); } public void close(){ //on ferme l'accès à la BDD bdd.close(); } public SQLiteDatabase getBDD(){ return bdd; } public long insertEvent(Event event){ //Création d'un ContentValues (fonctionne comme une HashMap) ContentValues values = new ContentValues(); //on lui ajoute une valeur associé à une clé (qui est le nom de la colonne dans laquelle on veut mettre la valeur) values.put(COL_Lieu, event.getlieu()); values.put(COL_Date, event.getDate()); values.put(COL_Description, event.getDescription()); //on insère l'objet dans la BDD via le ContentValues return bdd.insert(TABLE_EVENT, null, values); } public int updateevent(int id, Event event){ //La mise à jour d'un livre dans la BDD fonctionne plus ou moins comme une insertion //il faut simple préciser quelle livre on doit mettre à jour grâce à l'ID ContentValues values = new ContentValues(); values.put(COL_Lieu, event.getlieu()); values.put(COL_Date, event.getDate()); values.put(COL_Description, event.getDescription()); return bdd.update(TABLE_EVENT, values, COL_ID + " = " +id, null); } public int removeeventWithID(int id){ //Suppression d'un livre de la BDD grâce à l'ID return bdd.delete(TABLE_EVENT, COL_ID + " = " +id, null); } public Event geteventWithlieu(String lieu){ //Récupère dans un Cursor les valeur correspondant à un livre contenu dans la BDD (ici on sélectionne le livre grâce à son titre) Cursor c = bdd.query(TABLE_EVENT, new String[] {COL_ID, COL_Lieu, COL_Date,COL_Description}, COL_Lieu + " LIKE \"" + lieu +"\"", null, null, null, null,null); return cursorToEvent(c); } public Event geteventWithlieu(int id){ //Récupère dans un Cursor les valeur correspondant à un livre contenu dans la BDD (ici on sélectionne le livre grâce à son titre) Cursor c = bdd.query(TABLE_EVENT, new String[] {COL_ID, COL_Lieu, COL_Date,COL_Description}, COL_ID + " LIKE \"" + id +"\"", null, null, null, null,null); return cursorToEvent(c); } //Cette méthode permet de convertir un cursor en un livre public Event cursorToEvent(Cursor c){ //si aucun élément n'a été retourné dans la requête, on renvoie null if (c.getCount() == 0) return null; //Sinon on se place sur le premier élément c.moveToFirst(); //On créé un livre Event event = new Event(); //on lui affecte toutes les infos grâce aux infos contenues dans le Cursor event.setId(c.getInt(NUM_COL_ID)); event.setlieu(c.getString(NUM_COL_Lieu)); event.setDate(c.getString(NUM_COL_Date)); event.setDescription(c.getString(NUM_COL_Description)); //On ferme le cursor c.close(); //On retourne le livre return event; } public ArrayList<HashMap<String, String>> openAndQueryDatabase() { try { bdd = maBaseSQLite.getWritableDatabase(); Cursor c = bdd.rawQuery("SELECT Lieu,Date,Description FROM table_event" , null); if (c != null ) { if (c.moveToFirst()) do { String lieu = c.getString(c.getColumnIndex("Lieu")); String date = c.getString(c.getColumnIndex("Date")); String description = c.getString(c.getColumnIndex("Description")); map = new HashMap<String, String>(); map.put("lieu", lieu); map.put("date", date); map.put("description", description); map.put("img", String.valueOf(R.drawable.ic_launcher)); listItem.add(map); } while (c.moveToNext()); } } catch (SQLiteException se ) { Log.e(getClass().getSimpleName(), "Could not create or Open the database"); } finally { if (bdd != null) bdd.execSQL("DELETE FROM " + TABLE_EVENT); bdd.close(); } return listItem; } } voila le code de mon MyActivity package com.example.FMP; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast; import java.util.ArrayList; import java.util.HashMap; import java.util.List; public class MyActivity extends Activity { private ListView maListViewPerso; Cursor c; ArrayList<HashMap<String, String>> listItem2; List<Event> contactList = new ArrayList<Event>(); @[member=override] public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button creerevent=(Button)findViewById(R.id.creerevent); Button connection=(Button)findViewById(R.id.connection); Button inscription=(Button)findViewById(R.id.inscription); creerevent.setOnClickListener(new View.OnClickListener() { @[member=override] public void onClick(View v) { Intent i = new Intent(MyActivity.this,Creerevenement.class); startActivity(i); } }); connection.setOnClickListener(new View.OnClickListener() { @[member=override] public void onClick(View v) { Intent i = new Intent(MyActivity.this,Connection.class); startActivity(i); } }); inscription.setOnClickListener(new View.OnClickListener() { @[member=override] public void onClick(View v) { Intent i = new Intent(MyActivity.this,Inscription.class); startActivity(i); } }); afficherevents (); bdd(); EventBDD e=new EventBDD(this); listItem2= e.openAndQueryDatabase(); SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), listItem2, R.layout.events, new String[] {"img", "titre","date", "description"}, new int[] {R.id.img, R.id.titre,R.id.date, R.id.description}); //On attribut à notre listView l'adapter que l'on vient de créer maListViewPerso.setAdapter(mSchedule); } private void bdd() { EventBDD eventBDD = new EventBDD(this); //Création d'un livre Event event = new Event("bxl", "17/01/1992","echengiste"); //On ouvre la base de données pour écrire dedans eventBDD.open(); //On insère le livre que l'on vient de créer eventBDD.insertEvent(event); //Pour vérifier que l'on a bien créé notre livre dans la BDD //on extrait le livre de la BDD grâce au titre du livre que l'on a créé précédemment Event eventFromBdd = eventBDD.geteventWithlieu(event.getlieu()); //Si un livre est retourné (donc si le livre à bien été ajouté à la BDD) if(eventFromBdd != null){ //On affiche les infos du livre dans un Toast Toast.makeText(this, eventFromBdd.toString(), Toast.LENGTH_LONG).show(); //On modifie le titre du livre eventFromBdd.setlieu("J'ai modifié le lieu de levent"); //Puis on met à jour la BDD eventBDD.updateevent(eventFromBdd.getId(), eventFromBdd); } //On extrait le livre de la BDD grâce au nouveau titre eventFromBdd = eventBDD.geteventWithlieu("J'ai modifié le lieu de levent"); //S'il existe un livre possédant ce titre dans la BDD if(eventFromBdd != null){ //On affiche les nouvelle info du livre pour vérifié que le titre du livre a bien été mis à jour Toast.makeText(this, eventFromBdd.toString(), Toast.LENGTH_LONG).show(); //on supprime le livre de la BDD grâce à son ID eventBDD.removeeventWithID(eventFromBdd.getId()); } //On essait d'extraire de nouveau le livre de la BDD toujours grâce à son nouveau titre eventFromBdd = eventBDD.geteventWithlieu("J'ai modifié le titre du livre"); //Si aucun livre n'est retourné if(eventFromBdd == null){ //On affiche un message indiquant que le livre n'existe pas dans la BDD Toast.makeText(this, "Ce livre n'existe pas dans la BDD", Toast.LENGTH_LONG).show(); } //Si le livre existe (mais normalement il ne devrait pas) else{ //on affiche un message indiquant que le livre existe dans la BDD Toast.makeText(this, "Ce livre existe dans la BDD", Toast.LENGTH_LONG).show(); } // print show on textview eventBDD.close(); } public void afficherevents () { //Récupération de la listview créée dans le fichier main.xml maListViewPerso = (ListView) findViewById(R.id.listevent); //Création de la ArrayList qui nous permettra de remplire la listView ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>(); //On déclare la HashMap qui contiendra les informations pour un item HashMap<String, String> map; //Création d'une HashMap pour insérer les informations du premier item de notre listView map = new HashMap<String, String>(); //on insère un élément titre que l'on récupérera dans le textView titre créé dans le fichier affichageitem.xml map.put("titre", "Word"); //on insère un élément description que l'on récupérera dans le textView description créé dans le fichier affichageitem.xml map.put("description", "Editeur de texte"); //on insère la référence à l'image (convertit en String car normalement c'est un int) que l'on récupérera dans l'imageView créé dans le fichier affichageitem.xml map.put("img", String.valueOf(R.drawable.ic_launcher)); //enfin on ajoute cette hashMap dans la arrayList listItem.add(map); //On refait la manip plusieurs fois avec des données différentes pour former les items de notre ListView map = new HashMap<String, String>(); map.put("titre", "Excel"); map.put("date","1/1/1"); map.put("description", "Tableur"); map.put("img", String.valueOf(R.drawable.ic_launcher)); listItem.add(map); map = new HashMap<String, String>(); map.put("titre", "Power Point"); map.put("date","1/1/1"); map.put("description", "Logiciel de présentation"); map.put("img", String.valueOf(R.drawable.ic_launcher)); listItem.add(map); map = new HashMap<String, String>(); map.put("titre", "Outlook"); map.put("date","1/1/1"); map.put("description", "Client de courrier électronique"); map.put("img", String.valueOf(R.drawable.ic_launcher)); listItem.add(map); //Création d'un SimpleAdapter qui se chargera de mettre les items présent dans notre list (listItem) dans la vue affichageitem SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), listItem, R.layout.events, new String[] {"img", "titre","date", "description"}, new int[] {R.id.img, R.id.titre,R.id.date, R.id.description}); //On attribut à notre listView l'adapter que l'on vient de créer maListViewPerso.setAdapter(mSchedule); map = new HashMap<String, String>(); map.put("titre", "Outlook"); map.put("date","1/1/1"); map.put("description", "Client de courrier électronique"); map.put("img", String.valueOf(R.drawable.ic_launcher)); listItem.add(map); } } la structure de mon listvieuw est bonne car jarrive a les afficher quand je n'entre pas dans la fonction openAndQueryDatabase() merci pour ton aide Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 14 mai 2014 Share Posté(e) 14 mai 2014 Et quel est le problème que tu rencontres maintenant quand tu appelles la méthode openAndQueryDatabase ? 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
loverius Posté(e) 14 mai 2014 Auteur Share Posté(e) 14 mai 2014 (modifié) Et quel est le problème que tu rencontres maintenant quand tu appelles la méthode openAndQueryDatabase ? aucun problème aucune erreur s'affiche :( sauf que dans mon Myactivity quand je fait appel a ce bout de code EventBDD e=new EventBDD(this); listItem2= e.openAndQueryDatabase(); SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), listItem2, R.layout.events, new String[] {"img", "titre","date", "description"}, new int[] {R.id.img, R.id.titre,R.id.date, R.id.description}); ma listvieuw ne ce mets pas a jour avec la listitem que j'ai recuper de openAndQueryDatabase(). selon moi dans listItem2 il devrais y avoir toutes les info de ma bdd et il manque plus qu'a les adapter en gros j'appel e.openAndQueryDatabase(); je rempli mon nouveaux listitem avec des map : public ArrayList<HashMap<String, String>> openAndQueryDatabase() { try { bdd = maBaseSQLite.getWritableDatabase(); Cursor c = bdd.rawQuery("SELECT Lieu,Date,Description FROM table_event" , null); if (c != null ) { if (c.moveToFirst()) do { String lieu = c.getString(c.getColumnIndex("Lieu")); String date = c.getString(c.getColumnIndex("Date")); String description = c.getString(c.getColumnIndex("Description")); map = new HashMap<String, String>(); map.put("lieu", lieu); map.put("date", date); map.put("description", description); map.put("img", String.valueOf(R.drawable.ic_launcher)); listItem.add(map); } while (c.moveToNext()); } } catch (SQLiteException se ) { Log.e(getClass().getSimpleName(), "Could not create or Open the database"); } finally { if (bdd != null) bdd.execSQL("DELETE FROM " + TABLE_EVENT); bdd.close(); } return listItem; } et je recupere le tout en l'adaptant a ma listveuw : EventBDD e=new EventBDD(this); listItem2= e.openAndQueryDatabase(); SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), listItem2, R.layout.events, new String[] {"img", "titre","date", "description"}, new int[] {R.id.img, R.id.titre,R.id.date, R.id.description}); maListViewPerso.setAdapter(mSchedule); Modifié 14 mai 2014 par loverius Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
loverius Posté(e) 14 mai 2014 Auteur Share Posté(e) 14 mai 2014 le probleme proviens du : if (c.moveToFirst()) do { } le programme nentre pas dans cette partie de code Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
loverius Posté(e) 14 mai 2014 Auteur Share Posté(e) 14 mai 2014 j'ai trouver lerreur ca fonctione ! 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.