我不确定为什么会发生这种情况,但当我返回某个活动时,我的应用中出现“访问关闭游标”错误。
以下是导致错误的代码:
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();
}
这是对的吗?我做得不对吗?任何帮助都会很棒。
答案 0 :(得分:3)
当您关闭onPause()
中的游标时,它们将在此之后无法使用。您需要创建新游标才能再次使用它们。
更好的方法是使用CursorLoader
以及活动的LoaderManager
方法返回的getLoaderManager()
。有关如何执行此操作的详细信息,请参阅文档,或查看this tutorial。