StackOverflowError 1.5 vs 1.6

时间:2010-08-01 00:13:13

标签: android

我有一个创建ListActivity的布局。在显示ListActivity之前,我执行数据库查询,然后使用SimpleCursorAdapter将该数据挂接到List。

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

更新:我确定当我从带有TabView的Activity移动到带有ListView的Activity时发生崩溃。如果我从不包含选项卡视图的活动转到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
}

因此,例如,在安装了2.1的Droid和基于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]  

1 个答案:

答案 0 :(得分:3)

可能此错误不是由数据库引起的。

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

对于1.5,它可能是13级深。也许尝试使用Hierarchy Viewer进行检查。

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

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

也许你在行中嵌套了太多LinearLayout?尝试制作简单的行 - 如果问题消失,你就会知道修复什么。

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