Chyba: Pokus o ZnovuSpustitDotaz již uzavřené kurzor

hlasů
4

Běžím do omylu, ale nemohu to najít řešení. Moje aplikace pracuje na ICS 4.0.3, ale vrátí chybu na Android 3.2. Zde je kód ve svém MainActivity.javasouboru:

SQLiteDatabase db = databaseHelper.getReadableDatabase();
         Cursor cursor = db.query(DatabaseHelper.TABLE_NAME, new String[]{_id,isim,icerik}, null, null, null, null, null);
         startManagingCursor(cursor);
         tts=0;



         while(cursor.moveToNext()){
            if(tts==0)
             {            
            array_spinner=new String[cursor.getCount()+1];
            array_spinner[tts]= FAVORİ;
             }
            array_spinner2[tts+1]= cursor.getString((cursor.getColumnIndex(isim)));
            array_spinner3[tts+1]= cursor.getString((cursor.getColumnIndex(icerik)));
             tts++;
            } 

         ss2 = (Spinner) findViewById(R.id.spinner2);
         ArrayAdapter<Object> adapter  = new ArrayAdapter<Object>(this,R.layout.row2, R.id.weekofday2, array_spinner2);
            ss2.setAdapter(adapter);
        } catch (Exception e) {}

Nějaké návrhy na to, jak vyřešit tento problém?

Položena 23/06/2012 v 15:23
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
10

Někde jste zavření Cursorjsou předávání do startManagingCursor(). Volejte stopManagingCursor()před zavřením Cursor.

Všimněte si, že startManagingCursor()je zastaralá. Namísto použití, které, pokud změny dat spustit další dotaz na pozadí (např AsyncTask, CursorLoader).

Také můžete zvážit použití CursorAdapter, jako SimpleCursorAdapterspíše než ruční převedení všech dat do objektů a za použití ArrayAdapter.

Také, pokud budete používat ArrayAdapter, prosím, prohlásit ji za další třídy betonu (např ArrayAdapter<String>ne ArrayAdapter<Object>.

Odpovězeno 23/06/2012 v 15:27
zdroj uživatelem

hlasů
1

dát to může pracovat pro vás:

    @Override
    protected void onRestart() {
        // TODO Auto-generated method stub
        super.onRestart();

        cursor.requery();
    }
Odpovězeno 24/06/2013 v 04:49
zdroj uživatelem

hlasů
1

Zdá se tato chyba je způsobena nepřesné využití METODA

startManagingCursor()

Nemůže být 100% jisti, že správně nazývá stopManagingCursor()vyřeší problém, protože je velmi příležitostně.

Chtěl bych doporučit, aby se zabránilo jeho použití a držet se CursorLoader a LoaderManager.

Odpovězeno 23/07/2015 v 10:18
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more