试图重新查询已经关闭的游标

时间:2013-04-24 13:01:18

标签: android sqlite cursor illegalstateexception

我只是在做简单的查询:

Cursor c = databaseHelper.getReadableDatabase().rawQuery("select " + MyTable.TABLE_FIELD.getColumnName() + " from " + MyTable.TABLE_NAME, null);

之后,我提取所需的数据并填充一些视图。

c.close();

一切都按预期工作。我有一个共享意图发送一封电子邮件,其中包含所显示的一些信息。在电子邮件应用程序发送电子邮件或关闭并且我的活动恢复到“生命”之后,将引发java.lang.IllegalStateException。 只有在这种情况下抛出此异常,如果我将其发送到后台然后再次调用它,则不会抛出此异常。我甚至打算打开youtube并播放视频,这个例外不会被抛出......

我真的不知道为什么会这样。

感谢您的时间。

ps:我已经尝试了//c.close();,但它也没有用。

3 个答案:

答案 0 :(得分:2)

您可以使用c.requery(),但在API级别11中已弃用。

  

不要使用它。只需要一个新光标,就可以这样做   新光标到来后异步并更新列表视图   回来。

     

再次执行创建光标的查询,刷新它   内容。这可以在任何时间完成,包括在致电之后   关闭()。由于此方法可以对数据库执行查询   并且可能需要一段时间,如果被调用它可能会导致ANR   主(UI)线程。如果存在此方法,则会打印警告   在主线程上执行。

答案 1 :(得分:1)

我发现导致此问题的原因。一些电子邮件的信息由来自“utils”类的另一个光标提供。在向电子邮件提供信息后,此光标已关闭,这导致了问题。而不是c.close();我改为c = null;,现在它正在发挥作用。

可能不是最好的解决方案,但现在它正在发挥作用。 感谢。

答案 2 :(得分:0)

这对我有用..

public void onBackPressed() {

    Intent i = new Intent(getApplicationContext(), ClassName.class);
    startActivity(i);
    finish();
    super.onStop();

}