2013-04-24 44 views
2

我在做简单的查询,如:试图重新查询一个已经关闭的游标

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

之后我提取所需的数据并填充一些看法。

c.close(); 

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

我真的不知道为什么会发生这种情况。

谢谢你的时间。我试过//c.close();,但它也没有工作。

回答

1

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

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

2

你可以使用c.requery(),但它是在API层面弃用11

不要使用此。只需要一个新的光标,所以你可以异步执行这个 ,并且一旦新的光标回到 就更新你的列表视图。

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

+0

,我认为最好的政策是这样的:http://helpmeco.de/2012/3/using-an-android-cursor-loader-with- a-content-provider – GuilhE 2013-04-24 13:50:17

+0

正确但你的问题是不同的;) – dhams 2014-08-21 03:10:40

0

这个工作对我..

public void onBackPressed() { 

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

} 
相关问题