Aller au contenu

Exam Androide pour vendredi BDD SQLlite :(


loverius

Recommended Posts

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é par loverius
Lien vers le commentaire
Partager sur d’autres sites

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

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 

Lien vers le commentaire
Partager sur d’autres sites

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é par loverius
Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...