我只是在做简单的查询:
Cursor c = databaseHelper.getReadableDatabase().rawQuery("select " + MyTable.TABLE_FIELD.getColumnName() + " from " + MyTable.TABLE_NAME, null);
之后,我提取所需的数据并填充一些视图。
c.close();
一切都按预期工作。我有一个共享意图发送一封电子邮件,其中包含所显示的一些信息。在电子邮件应用程序发送电子邮件或关闭并且我的活动恢复到“生命”之后,将引发java.lang.IllegalStateException
。
只有在这种情况下抛出此异常,如果我将其发送到后台然后再次调用它,则不会抛出此异常。我甚至打算打开youtube并播放视频,这个例外不会被抛出......
我真的不知道为什么会这样。
感谢您的时间。
ps:我已经尝试了//c.close();
,但它也没有用。
答案 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();
}