2010-08-01 96 views
3

我有一个创建ListActivity的布局。在显示ListActivity之前,我执行一个数据库查询,然后使用SimpleCursorAdapter将该数据绑定到列表。StackOverflowError 1.5 vs 1.6

所有这些在1.6和更高版本上正常工作。在1.5上,执行查询的函数成功执行,但几秒钟后发生了StackOverflowError。有谁知道为什么这个错误会发生在1.5而不是在1.6?

更新:我确定当我从具有TabView的活动移动到具有ListView的活动时发生崩溃。如果我从不包含选项卡视图的活动转到ListView,则不会发生崩溃。带有ListView的活动将一个Cursor返回到数据库大约有10列的查询。在这10列中,我在屏幕上显示3列。

这里是执行我的代码流:

TabView Activity sends Intent to start List View Activity 

onCreate() //of ListActivity 
{ 
    showList(); 
} 

showList() 
{ 
    //open DataBase 
    //perform query 
    //create SimpleCursorAdapter 
    //setListAdapter 
} 

因此,举例来说,这完全运行罚款一Droid的安装2.1和仿真器瞄准1.6。但是,上述失败的HTC Hero 1.5和1.5的仿真器。

如果我让setListAdapter执行,就会发生崩溃。如果这条线出去了,一切正常,但显然我的数据没有显示。它不会在调用setListAdapter的行上崩溃,但如果setListAdapter被执行,它最终会崩溃。

堆栈跟踪:

Thread [<3> main] (Suspended (exception StackOverflowError)) 

ViewRoot.draw(boolean) line: 1235 
ViewRoot.performTraversals() line: 1030 
ViewRoot.handleMessage(Message) line: 1482 
ViewRoot(Handler).dispatchMessage(Message) line: 99 
Looper.loop() line: 123 
ActivityThread.main(String[]) line: 3948  
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] 
Method.invoke(Object, Object...) line: 521 
ZygoteInit$MethodAndArgsCaller.run() line: 782 
ZygoteInit.main(String[]) line: 540 
NativeStart.main(String[]) line: not available [native method] 
+0

在创建SimpleCursorAdapter之前,您是否在光标上调用startManagingCursor? – 2010-08-01 00:16:24

+0

嗨,吉姆,是的,我打电话给startManagingCursor。我查询,管理游标,然后设置列表适配器。我编辑了这篇文章,指出当setListAdapter被调用时崩溃发生。 – Michael 2010-08-01 00:26:16

+0

更新:如果我从包含TabView的活动移动到包含ListActivity的活动,则会发生此错误。 但是,如果我通过选项卡视图以外的方式转到ListActivity,则不会发生崩溃。 – Michael 2010-08-01 00:46:47

回答

3

也许这个错误不是由数据库引起的。

实际上,当您的布局层次结构太深时,通常会发生此错误。

对于1.5它可能是13层深。也许试着用Hierarchy Viewer来检查它。

同时发布堆栈跟踪可能会有所帮助。

更新: Stacktrace清楚地指出问题在于你的行布局。当您注释掉设置适配器时,您的行不会被绘制,因此不会发生错误。

也许你在你的行中嵌套了太多的LinearLayout?尝试制作简单的行 - 如果问题消失,您将知道要修复的内容。

也考虑从LinearLayout移动到RelativeLayout。它使您的视图层次结构变平。虽然考虑到RelativeLayout有一些错误,例如。 RelativeLayout differences between 1.5 and 2.1

+0

嗨像素,我同意我不相信它是一个数据库问题,而是一个布局问题。在昨天之前,我并没有意识到标签视图的资源密集程度如何。 感谢您指出层次结构查看器,我会试一试。 堆栈跟踪只显示绘图方法(我相信指向布局)的崩溃,我将编辑帖子并将跟踪也放在那里。 – Michael 2010-08-01 15:52:27

+0

默认堆栈大小从1.6增加到12K(“甜甜圈”)。没有明确的“13级”限制,尽管可能碰巧解决这个问题。 – fadden 2010-08-02 23:04:01