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

감사합니다 이것은 훌륭한 웹입니다. 많은 정보를 얻었습니다. 저는 안드로이드에서 초보자입니다. 문제는 내가 애플 리케이션을 실행할 때 회 전자 아무것도 채우지 않을 것입니다하지만 만약 내가 그 정보를 가지고 listview 또는 그것을 textview에서 그것을 캐스팅, 나는 스피너 채우기 메서드가 다른 개체보다 다른 경우 알 수 없다 – dakairus

답변

1

이 내가 그것을 할 방법이다. 메소드 외부의 모든 변수를 선언하여 클래스 전체에 공개되도록했습니다. 과거 실수를 한 것은 스피너를 채운 후 커서를 닫는 것입니다. 회 전자에 데이터를 표시하려면 커서를 열어 두어야합니다.

나는 이것이 당신을 위해 그것을 해결하기를 바랍니다.

편집 : raw.py에서 _id를 쿼리하지 않는 것으로 나타났습니다. 회 전자를 채우려는 경우이를 포함해야합니다. 내가 제공 한 코드를 분석하십시오.

+0

마지막으로 작동합니다. – dakairus

+0

코드는 정확하지만 DB 처리를 클래스 자체 (DbAdapter와 같은)로 캡슐화하고 활동 코드에서 DB 호출을 호출하여 회 전자를 채 웁니다. 이 방법은 미래의 변화를 위해 더 유연하고 개방적입니다. –

0

, 당신은 프레임 워크가 어디 어댑터에서 귀하의 정보를 넣어하는 방법을 알 수 있도록, 찾기/spinner1를 정의해야

여기 내 코드입니다.

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에서 모든 것을했다 :

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); spinner1 = (회 전자) findViewById (R.id.spinner1); consulta(); } – dakairus

+0

거기에 값을 선언하고 선언합니까, 아니면 전체 클래스에서 사용할 수 있도록 선언합니까? 프레임 워크가 어댑터를로드 할 수없는 것처럼 들립니다. 여러분은 onCreate가 아닌 main 클래스에서 선언되도록 public으로 만들거나 옮길 수 있습니다. – Barak

관련 문제