IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

[ListView] Adapater / NullPointerException


Sujet :

Composants graphiques Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut [ListView] Adapater / NullPointerException
    Bonjour ,

    J'aurais un souci concernant un : NullPointerException.

    Je m'explique , je programme une application qui quand elle démarre arrive sur un écran d'acceuil ou l'on choisi :

    - BUTTON 1 (vers : Begin.java): Importe une database(sqlite) , de ASSETS vers /data/data/package/databases/.(la tout va bien l'importation etc se fait bien)

    - BUTTON 2 (Vers : List.java): Affichage de champs de la database (nom et prenom)

    Et c'est dans le deuxième affichage List.java que j'aurais un souci.
    Quand c'est pour afficher une liste Statique aucun problème.
    Du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public class List extends Activity implements OnClickListener {
     
    	 public void onCreate(Bundle savedInstanceState) {
    	        super.onCreate(savedInstanceState);
    	        setContentView(R.layout.second);
     
    	        ListView lv1 ;
    	        final String lv_arr[]={"Android","iPhone","BlackBerry","AndroidPeople","Symbian", "Soleil"};
    	        lv1=(ListView)findViewById(R.id.list);
    	        lv1.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1 , lv_arr));
     
     
    	        Button button = (Button)findViewById(R.id.button1);
    	        button.setOnClickListener(this); 
    }
     
    	@Override
    	public void onClick(View v) {
    		finish();
    	}
    }
    Mais quand j'essaye de faire apparaitre les champs "nom" et "prenom" ... j'ai des erreurs...
    Décryptage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Caused by : java.lang.NullPointerException
    at com.importdatabase.DataseHelper.getPersonnes(DatabaseHelper.java:136)
    at com.importdatabase.List.onCreate(List.java:19)

    Donc pour la ligne 136 : databaseHelper.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public ArrayList<String> getPersonnes() {
        ArrayList<String> output = new ArrayList<String>();
        String[] colonnesARecup = new String[] { "nom", "prenom" };
        Cursor cursorResults = mydb.query(TABLE_LISTELEC, colonnesARecup, null,
                null, null, null, "nom asc, prenom asc", null);
    	while (cursorResults.moveToFirst())
    	{
    		output.add(cursorResults.getString(0) + " " + cursorResults.getString(1));
    	}				
        return output;
    }
    pour la ligne 19 : List.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    public class List extends Activity implements OnClickListener {
    
    	 public void onCreate(Bundle savedInstanceState) {
    	        super.onCreate(savedInstanceState);
    	        setContentView(R.layout.second);
           
    	        DatabaseHelper dbh = new DatabaseHelper(this.getApplicationContext ());
    	        ListView lvListe = (ListView)findViewById(R.id.listView1	); 
    	        lvListe.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,dbh.getPersonnes()));
    	        
    	        Button button = (Button)findViewById(R.id.button1);
    	        button.setOnClickListener(this); 
    }
    
    	@Override
    	public void onClick(View v) {
    		finish();
    	}
    }
    Merci à vous ,

    Cordialement ,

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 101
    Par défaut
    Question bête mais sait-on jamais : As tu bien instancié mydb ? Vérifie en mettant un breakpoint à la ligne 136 et en lançant ton appli en mode debug.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut
    Ok merci , j'ai mis un Toggle breakpoint et le programme s'arrête donc sur la ligne sans planter.
    Il me dis sinon quand je regarde un peu la valeur de mydb elle est "Null".

    Je pensais que sa pouvais venir de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @Override
        public synchronized void close() {
            if(mydb != null)
                mydb.close();
            super.close();
        }
    et j'ai donc mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @Override
        public synchronized void close() {
            if(mydb != null)
              //  mydb.close();
            super.close();
        }
    Mais cela plante pareil ...

    Du coup voila mes appels mydb :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    //declaration 
        private SQLiteDatabase mydb; 
     
    //...........Code...................//
     
    public void openDatabase() throws SQLException {
    	//Open the database
        String myPath = DB_PATH + DB_NAME;
    	mydb = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
    }
    //...........Code...................//
     
    @Override
        public synchronized void close() {
            if(mydb != null)
                mydb.close();
            super.close();
        }
     
    public ArrayList<String> getPersonnes() {
        ArrayList<String> output = new ArrayList<String>();
        String[] colonnesARecup = new String[] { "nom", "prenom" };
        Cursor cursorResults = mydb.query(TABLE_LISTELEC, colonnesARecup, null,
                null, null, null, "nom asc, prenom asc", null);
    	while (cursorResults.moveToFirst())
    	{
    		output.add(cursorResults.getString(0) + " " + cursorResults.getString(1));
    	}				
        return output;
    }

  4. #4
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2011
    Messages : 25
    Par défaut
    Salut,

    Si je comprends bien pour le deuxième bouton tu essais de mettre une interface graphique avec une listview dans laquelle apparait une partie de la base sqlite comportant le nom et le prénom ?

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut
    Oui c'est bien sa , j'ai un deuxieme xml avec une listView ou je voudrais faire afficher les "nom" et "prenom" dedans.

    Je suis obliger de le faire dans une vue différente puisque j'ai un bouton pour importer la base , et un bouton ensuite pour l'afficher.

    Une idée ? ^^

  6. #6
    Membre chevronné
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Par défaut
    Salut,

    Une question, à quel endroit tu fais appel à ta fonction openDatabase() ? Je parle de la fonction que tu as écrit qui elle fera appel à SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut
    J'instancie avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DatabaseHelper dbh = new DatabaseHelper(this.getApplicationContext ());
    J'appelle la Classe DatabaseHelper que j'alias en dbh dans un nouveau context.

    Si tu as des idées de test à faire :S je tourne en rond la ...

  8. #8
    Membre chevronné
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DatabaseHelper dbh = new DatabaseHelper(this.getApplicationContext ());
    La tu crée une instance de DatabaseHelper, mais en aucun cas (je pense du moins) ça instancie ta variable mydb.

    Tu pourrai faire un test déjà pour savoir si t'es bien passé dans la fonction openDatabase()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void openDatabase() throws SQLException {
    	//Open the database
    Log.i("test","on va instancier mydb");
        String myPath = DB_PATH + DB_NAME;
    	mydb = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
    Log.i("test","mydb="+mydb);
    }
    Vérifie dans ton LogCat après si t'as bien les traces.

    Après je sais pas si c'est une méthode implémentée openDatabase() mais si c'est toi qui l'a crée, tu devrai peut être la nomée différemment pour évité de t'embrouiller, et surtout essayer de respecter la syntaxe: openDataBase()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. NullpointerException sur un adapteur de ListView
    Par Anduriel dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 19/01/2014, 11h22
  2. ListView NullPointerException
    Par eento dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 05/08/2012, 17h32
  3. listview ??
    Par Galdarion dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/09/2002, 17h02
  4. ListView->Items->Clear() !!! Qques probl de perf
    Par Nicolas_a69 dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/08/2002, 11h49
  5. ListView
    Par SnickeursMan dans le forum Composants VCL
    Réponses: 2
    Dernier message: 14/08/2002, 10h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo