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

相关问题