2015-07-23 4 views
1

Привет Я разрабатываю приложение для Android, в котором я использую AutoCompleteTextView для поиска имен с помощью SimpleCursorAdapter, как в следующем коде.Android - Использование SimpleCursorAdapter в AutoCompleteTextView дает исключение

autoCompleteNamadtxt = (AutoCompleteTextView) findViewById(R.id.namadtxt); 
    dbHelper = new DBHelper(this); 
    dbHelper.open(); 

    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_dropdown_item_1line, 
            null, 
            new String[] { "Namad" }, 
            new int[] {android.R.id.text1}); 
    autoCompleteNamadtxt.setAdapter(adapter); 

    adapter.setCursorToStringConverter(new SimpleCursorAdapter.CursorToStringConverter() { 
     @Override 
     public CharSequence convertToString(Cursor cursor) { 
      final int colIndex = cursor.getColumnIndexOrThrow("Namad"); 
      return cursor.getString(colIndex); 
     } 
    }); 
    adapter.setFilterQueryProvider(new FilterQueryProvider() { 
     public Cursor runQuery(CharSequence constraint) { 
      String partial = null; 
      if (constraint != null) 
       partial = constraint.toString(); 
      Cursor cursor = dbHelper.getAllNamad(new String[]{partial.trim() + "%"}); 
      startManagingCursor(cursor); 
      cursor.moveToFirst(); 
      return cursor; 
     } 
    }); 

    dbHelper.close(); 

dbHelper:

public Cursor getAllNamad(String[] param, SQLiteDatabase sqLite) { 
    Cursor cursor = sqLite.rawQuery("select Id as _id,Namad from Namad Where Namad LIKE ؟", param); 
    return cursor; 
} 

, когда я начинаю набирать в AutoCompleteTextView, я сталкиваюсь со следующим ecxeption, мне интересно, если кто-то может помочь мне.

07-23 09:00:56.209 2398-2419/? W/Filter﹕ An exception occured during performFiltering()! 
java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/data/com.sahmchin.sabadyab/databases/Sabadyab.db 
     at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55) 
     at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1312) 
     at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1255) 
     at com.sahmchin.sabadyab.Database.TblNamad.getAllNamad(TblNamad.java:32) 
     at com.sahmchin.sabadyab.Database.DBHelper.getAllNamad(DBHelper.java:345) 
     at com.sahmchin.sabadyab.BuySahmActivity$2.runQuery(BuySahmActivity.java:71) 
     at android.widget.CursorAdapter.runQueryOnBackgroundThread(CursorAdapter.java:395) 
     at android.widget.CursorFilter.performFiltering(CursorFilter.java:49) 
     at android.widget.Filter$RequestHandler.handleMessage(Filter.java:234) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.os.HandlerThread.run(HandlerThread.java:61) 

ответ

0

нашел путь сам, я должен поставить "dbHelper.open()" в начале функции "setFilterQueryProvider"

 adapter.setFilterQueryProvider(new FilterQueryProvider() { 
     public Cursor runQuery(CharSequence constraint) { 
      dbHelper.open(); 
      Cursor cursor = dbHelper.getAllNamad(
        (constraint != null ? constraint.toString() : null)); 
      startManagingCursor(cursor); 
      cursor.moveToFirst(); 
      return cursor; 
     } 
    }); 
Смежные вопросы