2

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

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

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

c.close();

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

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

谢谢你的时间。

ps:我试过//c.close();了,还是不行。

4

3 回答 3

2

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

不要使用这个。只需请求一个新游标,这样您就可以异步执行此操作,并在新游标返回后更新您的列表视图。

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

于 2013-04-24T13:11:44.540 回答
1

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

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

于 2013-04-24T13:58:34.443 回答
0

这对我有用..

public void onBackPressed() {

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

}
于 2015-03-02T12:35:24.613 回答