0

我不确定为什么会发生这种情况,但是当我返回活动时,我的应用程序中出现“访问关闭光标”错误。

这是导致错误的代码:

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();
}

这个对吗?我做的不对吗?任何帮助都会很棒。

4

1 回答 1

3

关闭 中的游标后onPause(),它们将无法使用。您需要创建新游标才能再次使用它们。

更好的方法是将 a与活动方法返回的CursorLoader一起使用。有关如何执行此操作的详细信息,请参阅文档,或查看本教程LoaderManagergetLoaderManager()

于 2013-05-29T18:07:59.580 回答