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 値が入力されました。しかし、「サンプルテキスト」が必要です。何が間違っていますか? 提案に感謝します

4

3 に答える 3

14
what am i doing wrong

ドキュメントを読んでいません...

列を持つ文字列の配列は2つあります。1つ目はクエリで使用され、2つ目はアダプタコンストラクタで使用されます(両方に1つの配列のみを使用しました)

1つ目はsqliteにどの列をカーソルに移動するかを指示し、2つ目はどの列を単一行のビューに表示/マッピングするかをアダプターに指示します。

次のCursorAdapterニーズはCursor_id

だから今、私たちがこのようにsmthinを行うべきであることはかなり明白です:

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

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

MyActivity.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 に答える