1

希望有人可以帮助解决这个在我看来是一个特殊的问题。我的思绪在这里有点跳动,因为它破坏了我对 Android Activity 生命周期的理解。让我试着让事情变得更清楚。

问题:我在自定义适配器(扩展 BaseAdapter)的“getView”方法期间收到“StaleDataException”,该适配器用于填充 GridView 的活动。到目前为止听起来很简单。当我第一次进入活动时,适配器按预期工作并且填充了网格。我在 Activity 上有一个按钮,它会触发 Intent 以允许用户拍照,然后通过“onActivityResult”返回,将图像保存到数据库中。这一切也都奏效了。事实上,我先写了那部分,然后添加了适配器和网格视图。

现在,当我去相机拍照时,正在发生 StaleDataException,然后单击“确定”返回......我在我的活动的大多数事件中都有很多 Log 语句,而且非常奇怪的是,StaleDataException 发生在任何之前这些事件被触发......在 OnActivityResult/OnResume 等之前。

所以我很困惑为什么在我正确返回我的活动之前以及在调用 onActivityResult/OnResume 之前访问适配器。

调试导致异常的步骤,这一切都发生在这一行:

String contentType = dataCursor.getString(dataCursor.getColumnIndexOrThrow(DbStatics.ACCIDENTS_MEDIA_KEY_TYPE));

让我感到困惑的是 dataCursor 实际上是 Open 并且第一个调用 (getColumnIndexOrThrow) 也返回一个值..所以它的 getString() 导致异常。

所以我希望这足够清楚......并且真的真的希望有人能够对正在发生的事情有所了解......

非常感谢,

4

1 回答 1

3

我最近在几乎完全相同的情况下遇到了完全相同的问题。(我使用的是画廊而不是 GridView)

就我而言,我的代码运行了好几个月——直到我最近将我的 N1 更新到 2.3。我的解决方案(在我自己的大脑跳动之后)是不在我传递给我的适配器的光标上调用 startManagingCursor。相反,我自己管理光标。

这似乎为我解决了问题......虽然我不能告诉你为什么......也许更有经验的人可以解释一下。

希望这对您有所帮助。

于 2011-03-22T00:59:02.007 回答