Java 仅在选定设备上的Listview上出现Android Stackoverflow错误

Java 仅在选定设备上的Listview上出现Android Stackoverflow错误,java,android,listview,views,stack-overflow,Java,Android,Listview,Views,Stack Overflow,在为Android开发本机应用程序的过程中,我遇到了一个常见的问题,即HTC DESIRE S在listview页面上频繁出现 事故发生的原因: Listview视图溢出 跨距溢出问题 视图溢出问题 其他(请解释) 日志: java.lang.StackOverflowError at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:940) at android.text.SpannableS

在为Android开发本机应用程序的过程中,我遇到了一个常见的问题,即HTC DESIRE S在listview页面上频繁出现

事故发生的原因:

  • Listview视图溢出
  • 跨距溢出问题
  • 视图溢出问题
  • 其他(请解释)
  • 日志:

    java.lang.StackOverflowError
    at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:940)
    at android.text.SpannableStringBuilder.drawText(SpannableStringBuilder.java:1042)
    at android.graphics.Canvas.drawText(Canvas.java:1323)
    at android.text.Styled.drawUniformRun(Styled.java:141)
    at android.text.Styled.drawDirectionalRun(Styled.java:298)
    at android.text.Styled.drawText(Styled.java:357)
    at android.text.Layout.drawText(Layout.java:1797)
    at android.text.Layout.draw(Layout.java:679)
    at android.widget.TextView.onDraw(TextView.java:4338)
    at android.view.View.draw(View.java:7014)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
    at android.view.View.draw(View.java:7017)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
    at android.view.View.draw(View.java:7017)
    at android.view.View.buildDrawingCache(View.java:6739)
    at android.view.View.getDrawingCache(View.java:6512)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1657)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
    at android.widget.AbsListView.dispatchDraw(AbsListView.java:1499)
    at android.widget.ListView.dispatchDraw(ListView.java:3194)
    at android.view.View.draw(View.java:7017)
    at android.widget.AbsListView.draw(AbsListView.java:2607)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
    at android.view.View.draw(View.java:7017)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
    at android.view.View.draw(View.java:7017)
    at android.widget.FrameLayout.draw(FrameLayout.java:357)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1730)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
    at android.view.View.draw(View.java:7017)
    at android.widget.FrameLayout.draw(FrameLayout.java:357)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1730)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
    at android.view.View.draw(View.java:7017)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1730)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
    at android.view.View.draw(View.java:7017)
    at android.widget.FrameLayout.draw(FrameLayout.java:357)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1730)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1730)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1730)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
    at android.view.View.draw(View.java:7017)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
    at android.view.View.draw(View.java:7017)
    at android.widget.FrameLayout.draw(FrameLayout.java:357)
    at android.view.ViewGroup.drawChild(ViewGroup.java:1732)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)
    at android.view.View.draw(View.java:7017)
    at android.widget.FrameLayout.draw(FrameLayout.java:357)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2054)
    at android.view.ViewRoot.draw(ViewRoot.java:1632)
    at android.view.ViewRoot.performTraversals(ViewRoot.java:1335)
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1991)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:150)
    at android.app.ActivityThread.main(ActivityThread.java:4385)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
    at dalvik.system.NativeStart.main(Native Method)
    

    跟踪这个错误会有很大帮助,因为我尝试了很多解决方案,但都没有成功。

    这发生在我的三星ace上,没有得到任何解决方案,但幸运的是,我的朋友发现问题通常是bcoz在我的代码中,一个程序变得无限递归,但它也可以以正确的方式出现(但非常递归)节目


    因此,请检查您的函数是否包含递归。

    正如Commonware所说,您的嵌套视图似乎太多了

    尝试使用更多的RelativeLayouts,因为它们允许以较少的嵌套生成复杂的视图。还可以尝试重构整个屏幕,而不仅仅是列表项

    如果您需要更多关于如何操作的帮助,请发布您的代码


    当布局树中的视图过多时,基本上会发生这种情况。 尝试从层次结构中删除一些视图,或者通过覆盖ListView的draw()方法并添加Try/catch来进行此“危险”修复:

    @Override
    public void draw(Canvas canvas) {
        try {
            super.draw(canvas);
        } catch (Exception e) {
            e.printStackTrace();
            //TODO reschedule a redraw?
        }
    }
    

    您可以发布
    getView()
    code吗?使用层次结构视图检查您的UI。我的猜测是您有太多嵌套的小部件。@Commonware是的,它是嵌套的,但我已经进行了很多优化,但在专用设备上,我发现每次都会崩溃。请让我进一步了解。我不能在这里发布代码,但可以通过邮件与您共享。您可以发布列表适配器吗?您可以不仅发布getView()代码,还发布整个适配器吗?