4

我遇到了一个错误,但我似乎找不到解决方案。我的应用程序在 ICS 4.0.3 上运行,但在 Android 3.2 上返回错误。这是我MainActivity.java文件中的代码:

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) {}

关于如何解决这个问题的任何建议?

4

3 回答 3

11

在某个地方,您正在关闭Cursor您正在传递的startManagingCursor(). stopManagingCursor()在关闭之前调用Cursor

请注意,startManagingCursor()已弃用。当您的数据更改时,不要使用它,而是在后台运行另一个查询(例如AsyncTask,,CursorLoader)。

此外,您可能会考虑使用CursorAdapter, like SimpleCursorAdapter,而不是手动将所有数据转换为对象并使用ArrayAdapter.

另外,如果您要使用ArrayAdapter,请用更具体的类声明它(例如ArrayAdapter<String>,不是ArrayAdapter<Object>.

于 2012-06-23T16:27:24.473 回答
2

放这个它可能对你有用:

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

        cursor.requery();
    }
于 2013-06-24T05:49:08.120 回答
1

此错误似乎是由于不正确使用不推荐使用的方法引起的

startManagingCursor()

不能 100% 确定正确调用stopManagingCursor()会解决问题,因为它是非常偶然的。

我建议避免使用它并坚持使用 CursorLoader 和 LoaderManager。

于 2015-07-23T11:18:43.947 回答