problems to transform sqlite data in object
I'm learning to open jobs on Android SQLite. I want to display the text of a spinner filled via a cursor. The problem when I use the:
nameOfSPinner.getSelectedItem().toString();
It displays the numbers of the selected index and not the data.
To solve this problem, I thought I could take all the information and store it in an object array, then fill the spinner with that information. (Is there a better approach?)
By the time I take what is written in the index and display it in the object, my app crashes with a NullPointerException
. I feel that there are basic开发者_如何学JAVA object-oriented programming that I did not understand but I do not see anything.
public Objet[] getObjetDescription2(){
Cursor c = bdd.query("nom de la table", new String[] {"rowid _id", "description", "id"},null, null, null, null, null);
return nomFonction(c);
}
private Objet[] nomFonction(Cursor c){
//si aucun élément n'a été retourné dans la requête, on renvoie null
if (c.getCount() == 0)
return null;
//Sinom on se place sur le premier élément
c.moveToFirst();
int compteur = c.getCount();
Objet[] objet = new Objet[100];
int i = 0;
do{
//on lui affecte toutes les infos grâce aux infos contenues dans le Cursor
objet[i].setDescription(c.getString(2));
objet[i].setId(c.getInt(1));
i++;
}while(i >= compteur);
//On ferme le cursor
c.close();
return objet;
}
Objet[] objet = new Objet[100];
This creates a new array that can hold 100 Objet
instances. It does not create any Objet
instance: all the slots are initially null
.
So you need to create the objects explicitly in your loop:
objet[i] = new Objet();
objet[i].setDescription(c.getString(2));
...
Also your loop structure is both unusual and incorrect (try simulating it on paper with compteur == 2
). Use a simple for loop.
for (i=0; i<compteur; i++) { ... }
And you're not advancing the cursor anywhere in there. You'll need to call moveToNext()
somewhere.
精彩评论