开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜