2012-04-26 16 views
-1

私はデータベースから情報を入力する必要があるスピナーを持っていますが、見つかった例は機能しません。あなたが出て任意のコードを残していなかったと仮定すると、データベース情報でスピナーを記入する方法

public void consulta() { 
    AdminSQLiteOpenHelper admin = 
     new AdminSQLiteOpenHelper(this, "administracion", null, 1); 
    SQLiteDatabase bd=admin.getWritableDatabase(); 

    Cursor c = bd.rawQuery("select name from category",null); 

    startManagingCursor(c); 

    // create an array to specify which fields we want to display 
    String[] from = new String[]{"name"}; 

    // create an array of the display item we want to bind our data to 
    int[] to = new int[]{android.R.id.text1}; 

    // create simple cursor adapter 
    SimpleCursorAdapter adapter = 
     new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, c, from, to); 

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    // get reference to our spinner 
    spinner1.setAdapter(adapter); 

    bd.close(); 
} 
+1

「動作しない」(エラーログ、スタックトレースなどを投稿してください)を定義してください。そして、ようこそ! – Jack

+1

'spinner1'はどこで定義しますか? – Sam

+0

これは素晴らしいウェブです、私は多くの情報を見つける、私はアンドロイドの初心者です。問題は、私はアプリを実行すると、スピナーは何も埋めることはありませんが、私はその情報を取るとリストビューやテキストビューでそれをキャストする場合、私は知っていませんスピナーメソッドが他のオブジェクトとは異なる – dakairus

答えて

1

これは、私はそれを行う方法です。

db = SQLiteDatabase.openDatabase("/data/data/packagename/databases/mydata.db", null, SQLiteDatabase.OPEN_READONLY); 
Cursor c_cat = db.rawQuery("select _id, column_desc from your_table", null); 
startManagingCursor(c_cat); 
spinner = (Spinner) findViewById(R.id.spinnername); 
String[] from = new String[]{"column_desc"}; 
int[] to = new int[]{android.R.id.text1}; 
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, c_cat, from, to); 
mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
spinner.setAdapter(mAdapter); 
db.close(); 

私は私のonCreateですべてのことをしました。メソッドの外側にあるすべての変数を宣言して、クラス全体に公開するようにしました。私が過去に間違いを犯したことの1つは、スピナーを充填した後にカーソルを閉じることでした。スピナー内のデータを表示するには、カーソルを開いたままにしておく必要があります。

これがあなたのために解決することを願っています。

EDIT:あなたのrawQueryで_idをクエリしていないことに気付きました。スピナーを作成する場合は、それを含める必要があります。私が提供したコードを分析してください。

+0

ようこそ、ありがとうございます! – dakairus

+0

コードは正しいですが、DB処理をクラス自体(DbAdapterのようなもの)にカプセル化し、アクティビティコードでDBへの呼び出しを行い、スピナーを設定します。このようにして、将来の変更のためにcodはより柔軟でオープンになります。 –

0

が、あなたはフレームワークはどこアダプタからあなたの情報を入れて知っているように、検索/ spinner1を定義する必要があります。

は、ここに私のコードです。

private Spinner spinner1; 

spinner1 = (Spinner) view.findViewById(R.id.yourspinnerid); 

// rest of your code 
+0

私はスピナ定義をoncreateクラスに入れます。 – dakairus

+0

@Override public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState); setContentView(R.layout.main); et1 =(EditText)findViewById(R.id.editText1);スピナー1 =(スピナー)findViewById(R.id.spinner1); consulta(); } – dakairus

+0

値を設定するだけでなく宣言していますか、それともクラス全体で使用できるように宣言していますか?それはフレームワークがそれにアダプタをロードするためにそれを見つけることができないように聞こえる。 onCreateではなくメインクラスで宣言されるように、パブリックにするか、移動するようにしてください。 – Barak

関連する問題