我遇到了错误,但我似乎无法找到解决方案。我的应用程序正在使用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) {}
有关如何解决此问题的任何建议?
答案 0 :(得分:11)
某处,您正在关闭传递给Cursor
的{{1}}。在关闭startManagingCursor()
之前致电stopManagingCursor()
。
请注意,Cursor
已弃用。当您的数据发生变化时,请在后台运行另一个查询(例如startManagingCursor()
,AsyncTask
),而不是使用它。
此外,您可以考虑使用CursorLoader
,例如CursorAdapter
,而不是手动将所有数据转换为对象并使用SimpleCursorAdapter
。
另外,如果您要使用ArrayAdapter
,请使用更具体的课程(例如ArrayAdapter
,而非ArrayAdapter<String>
)声明。
答案 1 :(得分:2)
说这可能对你有用:
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
cursor.requery();
}
答案 2 :(得分:1)
此错误似乎是由于不推荐使用已弃用的方法
造成的startManagingCursor()
不能100%确定正确调用stopManagingCursor()
会解决问题,因为它很偶然。
我建议避免使用它并坚持使用CursorLoader和LoaderManager。