2012-04-26 3 views
-1

У меня есть счетчик, который мне нужно заполнить информацией из базы данных, но примеры, которые я нашел, не работают.Как заполнить Spinner с информацией о базе данных

Вот мой код:

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

спасибо, что это отличная сеть, я нахожу много информации, я начинаю работать в android. Проблема возникает, когда я запускаю приложение, счетчик не заполняется чем-либо, но если я беру эту информацию и бросаю ее в виде списка или текстового представления, это не работает, я не знаю, отличается ли метод заполнения счетчика другими объектами. – 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. Я объявлял все мои переменные вне метода, чтобы они были общедоступны для всего класса. Одна вещь, которую я допустил в прошлом, заключалась в закрытии курсора после заполнения счетчика. Курсор должен оставаться открытым, если вы хотите видеть данные в счетчике.

Я надеюсь, что это решает его для вас.

EDIT: Я заметил, что вы не запрашиваете _id в своем rawQuery. Вы должны включить это, если хотите заполнить счетчик. Проанализируйте предоставленный мной код.

+0

спасибо, наконец, он работает !! – dakairus

+0

Код верный, но я инкапсулирую обработку БД в сам класс (что-то вроде DbAdapter), а в коде действия - вызов в БД и заполнение счетчика. Таким образом, треска более гибкая и открытая для будущих изменений. –

0

Предполагая, что вы не оставили никакого кода, вы должны найти/определить Spinner1, так что структура знает, куда поместить свою информацию от адаптера.

private Spinner spinner1; 

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

// rest of your code 
+0

Я положил spinner define в класс oncreate – dakairus

+0

@Override public void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.main); et1 = (EditText) findViewById (R.id.editText1); = Spinner1 (Spinner) findViewById (R.id.spinner1); Consulta(); } – dakairus

+0

Вы объявляете его там, а также задаете значение, или объявляете его так, чтобы оно было доступно для всего класса? Похоже, что фреймворк не может найти его для загрузки адаптера в него. Вы можете попытаться сделать его общедоступным или переместить, чтобы он был объявлен в основном классе, а не в onCreate. – Barak