您好我嘗試從SQLite數據庫加載數據到微調,所以我得到這個錯誤試圖訪問一個關閉的CursorWindow。我有這些課程: CategoryBDD.java package com.example.mydrugstore;錯誤:試圖訪問一個關閉的光標窗口
public class CategoryBDD {
private SQLiteDatabase mdb;
private BasepharmaSQLiteHelper mabasepharma;
public CategoryBDD (Context context)
{
mabasepharma = new BasepharmaSQLiteHelper(context, Parambdd.DB_NAME, null, Parambdd.SCHEMA_VERSION);
}
/** ouvre la base de données en écriture */
public void open(){
//on ouvre la BDD en écriture
mdb = mabasepharma.getWritableDatabase();
}
/** ferme la base de données */
public void close(){
//on ferme l'accès à la BDD
mdb.close();
}
public Category insertcategory(Category c)
{
ContentValues valeur = new ContentValues();
valeur.put(Parambdd.CATEGORY_NAME, c.getName());
long insertId= mdb.insert(Parambdd.TABLECATEGORY, null, valeur);
Cursor cursor = mdb.query(Parambdd.TABLECATEGORY,
new String[] {Parambdd.CATEGORY_NAME}, Parambdd.CATEGORY_ID + " = " + insertId, null,
null, null, null);
cursor.moveToFirst();
Category newcategory = cursorToCategory(cursor);
cursor.close();
return newcategory;
}
public int updateCategory(Category ctgr){
ContentValues values = new ContentValues();
values.put(Parambdd.CATEGORY_NAME, ctgr.getName());
return mdb.update(Parambdd.TABLECATEGORY, values, Parambdd.CATEGORY_NAME + " = " +ctgr.getName(), null);
}
public void deletecategory (Category c)
{
long id = c.getId_category();
mdb.delete(Parambdd.TABLECATEGORY,Parambdd.CATEGORY_ID+" = "+id, null);
}
public List<String> getAllCategorys() {
List<String> categorys = new ArrayList<String>();
Cursor cursor = mdb.query(Parambdd.TABLECATEGORY, new String[] {Parambdd.CATEGORY_NAME}, null, null, null, null, null);
cursor.moveToFirst();
if (cursorToCategory(cursor) == null)
{
return null;
}
else
{
while (!cursor.isAfterLast()) {
Category c = cursorToCategory(cursor);
categorys.add(c.getName());
cursor.moveToNext();
}
// Make sure to close the cursor
cursor.close();
return categorys;
}
}
private Category cursorToCategory(Cursor c){
if (c.getCount() == 0)
return null;
c.moveToFirst();
Category ctgr = new Category(c.getString(0));
// ctgr.setId_category(c.getLong(0));
// ctgr.setName(c.getString(1));
c.close();
return ctgr;
}
}
Main.java: 公共類主要擴展活動{
Spinner spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.adddrug);
spinner = (Spinner) findViewById(R.id.spinner1);
loadSpinnerData();
}
private void loadSpinnerData() {
// database handler
CategoryBDD catdb = new CategoryBDD(getApplicationContext());
catdb.open();
Category c = new Category("toto"); //test insert category "toto"
catdb.insertcategory(c);
// catdb.open();
// Spinner Drop down elements
List<String> categoryname = catdb.getAllCategorys();
for (int i = 0;i < categoryname.size();i++)
{
Log.w("Main", categoryname.get(i));
}
// Creating adapter for spinner
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, categoryname);
// Drop down layout style - list view with radio button
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// attaching data adapter to spinner
spinner.setAdapter(dataAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
誰能幫助我?
什麼斗的意思是將這段代碼 – medman
PLZ比較這代碼解決我的問題與ur代碼,看看差異.. –
對不起,但我已經做到了,但總是相同的錯誤 – medman