【问题标题】:Trying to requery an already closed cursor试图重新查询一个已经关闭的游标
【发布时间】:2013-04-18 01:08:41
【问题描述】:

我正在做简单的查询,例如:

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

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

c.close();

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

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

感谢您的宝贵时间。

ps:我试过//c.close();,但也没用。

【问题讨论】:

    标签: android sqlite cursor illegalstateexception


    【解决方案1】:

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

    不要使用这个。只需请求一个新的光标,这样你就可以做到这一点 异步并在新光标出现后更新您的列表视图 返回。

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

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      这对我有用..

      public void onBackPressed() {
      
          Intent i = new Intent(getApplicationContext(), ClassName.class);
          startActivity(i);
          finish();
          super.onStop();
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 2011-08-28
        • 1970-01-01
        • 2011-08-20
        • 2015-03-06
        • 1970-01-01
        相关资源
        最近更新 更多