访问关闭的游标导致强制关闭

问题描述:

我不知道为什么会发生这种情况,但当我返回到活动时,我的应用程序中出现“访问关闭的游标”错误。访问关闭的游标导致强制关闭

下面是导致该错误代码:

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

你在哪里重新打开光标? –

+0

@LarryMcKenzie - 在调用'close()'后,你不能重新打开游标(使用'requery()')。你必须创建一个新的'Cursor'对象。 –

+0

你在哪里查询或重新创建光标? –

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

更好的方法是使用CursorLoader以及活动的getLoaderManager()方法返回的LoaderManager。有关如何执行此操作的详细信息,请参阅文档,或查看this tutorial

+0

谢谢! (5个字符) – scarhand