在对象中转换sqlite数据的问题

时间:2011-09-23 11:34:29

标签: android sqlite cursor

我正在学习在Android SQLite上打开工作。我想显示通过光标填充的微调器的文本。我使用的问题:

nameOfSPinner.getSelectedItem().toString();

显示所选索引的编号,而不是数据。

为了解决这个问题,我想我可以获取所有信息并将其存储在一个对象数组中,然后用该信息填充微调器。 (有更好的方法吗?)

当我把索引中写的内容显示在对象中时,我的应用程序崩溃了NullPointerException。我觉得有一些基本的面向对象的编程,我不明白,但我没有看到任何东西。

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;
    }

1 个答案:

答案 0 :(得分:0)

Objet[] objet = new Objet[100];

这将创建一个可容纳100个Objet个实例的新数组。它不会创建任何Objet实例:所有插槽最初都是null

所以你需要在循环中显式创建对象:

  objet[i] = new Objet();
  objet[i].setDescription(c.getString(2));
  ...

此外,您的循环结构既不常见又不正确(尝试使用compteur == 2在纸上进行模拟)。使用简单的for循环。

for (i=0; i<compteur; i++) { ... }

并且你没有将光标推进到那里的任何地方。你需要在某个地方拨打moveToNext()