2012-04-26 121 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

請定義「不要工作」(發佈錯誤日誌,堆棧跟蹤等)。歡迎來到SO! – Jack 2012-04-26 13:48:58

+1

你在哪裏定義'spinner1'? – Sam 2012-04-26 13:51:22

+0

感謝這是一個偉大的網絡,我發現很多的信息,我在android開始。當我運行應用程序時,問題發生,微調不會填充任何東西,但如果我把這些信息,並將其投在ListView或TextView的作品,我不知道如果微調填充方法是不同於其他對象 – dakairus 2012-04-26 13:54:17

回答

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。我在方法之外聲明瞭所有的變量,以便它們對整個班級公開。過去我犯過一個錯誤的事情是在填充微調器後關閉光標。如果要查看微調器中的數據,光標必須保持打開狀態。

我希望這能爲你解決。

編輯:我注意到你沒有在你的rawQuery查詢_id。如果您希望填充微調器,則必須包含該項。分析我提供的代碼。

+0

感謝終於它的作品! – dakairus 2012-04-26 20:35:17

+0

代碼是正確的,但我會將DB處理封裝到類本身中(類似於DbAdapter),並在Activity代碼中調用數據庫並填充微調器。這樣鱈魚更加靈活並且可以適應未來的變化。 – 2014-11-30 14:52:44

0

假設你沒有留下任何的代碼時,你需要找到/定義spinner1,使框架知道在哪裏把你的信息從適配器。

private Spinner spinner1; 

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

// rest of your code 
+0

我把微調定義在oncreate類 – dakairus 2012-04-26 14:06:17

+0

@Override public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);的setContentView(R.layout.main); ET1 =(的EditText)findViewById(R.id.editText1); spinner1 =(微調)findViewById(R.id.spinner1); CONSULTA(); } – dakairus 2012-04-26 14:07:40

+0

你是否在這裏聲明它,並設置它的價值,還是你聲明它,這樣它可以提供給整個班級?聽起來像框架無法找到它來加載適配器。你可以嘗試公開它,或者移動它,以便它在主類中而不是在onCreate中聲明。 – Barak 2012-04-26 14:10:22