使用数据库列填充微调器,第一行被丢弃

时间:2012-02-16 17:44:17

标签: android database spinner adapter

        db.open();
        cursor = db.getAllRecords();
        int i = 0;
        for(cursor.moveToFirst(); cursor.moveToNext(); cursor.isAfterLast()) { 
            spinnerItems[i] = cursor.getString(NAME_COLUMN);
            Log.v(TAG, "spinnerItem "+i+"="+spinnerItems[i]);
            i++;
        }

为什么上面的代码在LogCat中给出了这个结果?:

spinnerItem 0=name1
spinnerItem 1=name2
spinnerItem 2=name3
spinnerItem 3=name4 and so on

当数据库看起来像这样:

row name
0   name0
1   name1
2   name2
3   name3
4   name4 and so on.

使用数据库的一列中的整个内容填充微调器的最佳方法是什么?上面我(尝试)创建spinnerItems [],然后我将arrayAadapters创建到微调器中。

1 个答案:

答案 0 :(得分:1)

对于你的主要问题,一切都关闭的原因在于你的for循环逻辑。

循环以moveToFirst()开头, - 光标现在在第0行。 然后,循环检查它是否通过条件,这是对moveToNext()的调用 - 光标现在在第1行。

所以第一次迭代,你的光标在第1行(如果光标只有1行,它将完全绕过循环!)。

更好的循环:

int i=0;
for (cursor.moveToFirst(); i < cursor.getCount(); i++) {
//Your code
cursor.moveToNext();
}

关于你的另一个问题,不幸的是我没有答案......我总是像程序那样建立它们。不过,快速谷歌搜索为我提供了这个: http://androidforbeginners.blogspot.com/2010/02/how-to-populate-spinner-widget-from.html