访问关闭的游标导致强制关闭
问题描述:
我不知道为什么会发生这种情况,但当我返回到活动时,我的应用程序中出现“访问关闭的游标”错误。访问关闭的游标导致强制关闭
下面是导致该错误代码:
public class TickClass extends TimerTask
{
private int columnIndex;
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (_index == 1) {
columnIndex = cursor.getColumnIndex(MySQLiteHelper.COLUMN_IMAGE_2);
_index = 2;
}
else {
columnIndex = cursor.getColumnIndex(MySQLiteHelper.COLUMN_IMAGE_1);
_index = 1;
}
String image_1 = cursor.getString(columnIndex);
image_1 = image_1.replace(".png", "");
int resourceId = getResources().getIdentifier(getPackageName() + ":drawable/" + image_1, null, null);
image_1_view.setImageDrawable(getResources().getDrawable(resourceId));
}
});
}
}
更具体地说,String image_1 = cursor.getString(columnIndex);
线就是Eclipse正在说的是导致它。
现在,我有以下几点,我用它来关闭游标3时,活动离开代码:
@Override
protected void onPause() {
cursor.close();
cursorCurrent.close();
cursorPrevious.close();
datasource.close();
super.onPause();
}
@Override
public void onDestroy() {
cursor.close();
cursorCurrent.close();
cursorPrevious.close();
datasource.close();
super.onDestroy();
}
这是正确的吗?我做得不对吗?任何帮助都会很棒。
答
当您关闭onPause()
中的游标后,它们将无法使用。您需要创建新的光标以再次使用它们。
更好的方法是使用CursorLoader
以及活动的getLoaderManager()
方法返回的LoaderManager
。有关如何执行此操作的详细信息,请参阅文档,或查看this tutorial。
+0
谢谢! (5个字符) – scarhand
你在哪里重新打开光标? –
@LarryMcKenzie - 在调用'close()'后,你不能重新打开游标(使用'requery()')。你必须创建一个新的'Cursor'对象。 –
你在哪里查询或重新创建光标? –