4

我有一个带有 2 列“id”、“sampletext”的表“mytable”的数据库我想查询 sampletext 的不同值并使用 SimpleCursorAdapter 提供给 Spinner。

这是尝试过的

String[] cols=new String[]{"sampletext"};
int[] lbls=new lbls[]{android.R.id.text1};
mycursor=sdb.query(true,"mytable", cols,null,null,null,null,null,null);
sca=new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, mycursor, cols,lbls,0);
sca.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spn.setAdapter(sca);

当我运行它时,我在第 4 行得到错误:id 不存在。当我将第一行更改为“id”时,微调器填充了 id 值。但我需要“sampletext”,我做错了什么?感谢任何建议

4

3 回答 3

14
what am i doing wrong

您没有阅读文档...

有两个带列的字符串数组:第一个用于查询,第二个用于适配器构造函数(您只使用了一个数组)

第一个告诉sqlite哪些列应该被带到Cursor,第二个告诉Adapter哪些应该被显示/映射到单行中的视图......

下一个CursorAdapter需要Cursor名为列的_id

所以现在很明显我们应该这样做:

String[] queryCols=new String[]{"_id", "sampletext"};
String[] adapterCols=new String[]{"sampletext"};
int[] adapterRowViews=new int[]{android.R.id.text1};
mycursor=sdb.query(true,"mytable", queryCols,null,null,null,null,null,null);
sca=new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, mycursor, adapterCols, adapterRowViews,0);
sca.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spn.setAdapter(sca);
于 2012-11-16T09:02:15.560 回答
1

这是一个原始查询的示例。请注意,查询返回的第一个 ID 列应标记为_id

我的数据库.java:

public class MyDatabase extends SQLiteAssetHelper {
     ...
    public Cursor getListNamesForDropDown() {
        SQLiteDatabase db = getReadableDatabase();
        String sql = "select ID _id, Name from MyTable order by Name ";
        Cursor c = db.rawQuery(sql, null);
        c.moveToFirst();
        return c;
    }

我的活动.java:

        @Override
        public void onCreate(Bundle savedInstanceState) {
....    
           Cursor cursorTest =  db.getListNamesForDropDown();
           android.widget.SimpleCursorAdapter  adapter = new android.widget.SimpleCursorAdapter(this, 
                   android.R.layout.simple_spinner_item,
                    cursorTest, 
                    new String[] {"Name"}, 
                    new int[] {android.R.id.text1}, 0);       
           adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
           spinnerTest.setAdapter(adapter);  
于 2014-10-22T19:41:13.633 回答
0
android.widget.SimpleCursorAdapter adapter = new android.widget.SimpleCursorAdapter(this,
            android.R.layout.simple_spinner_item,
            cursor,
            new String[] { DBOpenHelper.ACCOUNT_BANK },
            new int[] { android.R.id.text1 }, 0);

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
于 2016-07-07T08:28:35.147 回答