我有一个创建listactivity的布局。在显示listactivity之前,我先执行一个数据库查询,然后使用simplecursoradapter将数据连接到列表。
所有这些在1.6和更高版本上都可以正常工作。在1.5上,成功执行查询的my函数执行,但几秒钟后发生stackoverflower错误。有人知道为什么这个错误会发生在1.5而不是1.6中吗?
更新:我已经确定,当我从具有tabview的活动移动到具有listview的活动时,会发生崩溃。如果从不包含选项卡视图的活动转到ListView,则不会发生崩溃。listview的活动是将一个游标返回到一个数据库有大约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的机器人和一个目标为1.6的仿真器上运行完全正常。但在1.5版本的htc英雄和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.5的深度可能是13层。也许试着用Hierarchy Viewer检查一下。
同时,发布堆栈跟踪可能会有所帮助。
更新:
stacktrace清楚地指出问题在于行布局。当您注释掉设置适配器时,不会绘制行,因此不会发生错误。
也许你的排中嵌套了太多的LinearLayout?试着做一些简单的行-如果问题消失了,你就会知道该修复什么。
也可以考虑从LinearLayout移动到RelativeLayout。它使视图层次结构变平。尽管考虑到RelativeLayout有一些缺陷,例如RelativeLayout differences between 1.5 and 2.1

关于android - StackOverflowError 1.5与1.6,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3380261/

10-12 03:12