java.lang.StackOverflowError 由 setImageResource

标签 java android

我的 android 应用程序在初始化 tabhost 时崩溃。但是来自用户的崩溃日志很奇怪!

大部分崩溃来自 android 2.3.x,在 android 4.x 上运行良好。

当我调用“setImageResource”时,我可以看到代码遇到了无限递归,但我不明白为什么。 代码:

    View tabIndicator = LayoutInflater.from(this).inflate(R.layout.tab_indicator, getTabWidget(), false);   
    ImageView icon = (ImageView) tabIndicator.findViewById(R.id.icon);
    icon.setImageResource(drawableId);  // crashed
    java.lang.StackOverflowError
at android.graphics.drawable.StateListDrawable$StateListState.<init>(StateListDrawable.java:257)
at android.graphics.drawable.StateListDrawable.<init>(StateListDrawable.java:303)
at android.graphics.drawable.StateListDrawable.<init>(StateListDrawable.java:70)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728)
at android.content.res.Resources.loadDrawable(Resources.java:1712)
at android.content.res.Resources.getDrawable(Resources.java:590)
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728)
at android.content.res.Resources.loadDrawable(Resources.java:1712)
at android.content.res.Resources.getDrawable(Resources.java:590)
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728)
at android.content.res.Resources.loadDrawable(Resources.java:1712)
at android.content.res.Resources.getDrawable(Resources.java:590)
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728)
at android.content.res.Resources.loadDrawable(Resources.java:1712)
at android.content.res.Resources.getDrawable(Resources.java:590)
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728)
at android.content.res.Resources.loadDrawable(Resources.java:1712)
at android.content.res.Resources.getDrawable(Resources.java:590)
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728)
at android.content.res.Resources.loadDrawable(Resources.java:1712)
at android.content.res.Resources.getDrawable(Resources.java:590)
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728)
at android.content.res.Resources.loadDrawable(Resources.java:1712)
at android.content.res.Resources.getDrawable(Resources.java:590)
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728)
at android.content.res.Resources.loadDrawable(Resources.java:1712)
at android.content.res.Resources.getDrawable(Resources.java:590)
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728)
at android.content.res.Resources.loadDrawable(Resources.java:1712)
at android.content.res.Resources.getDrawable(Resources.java:590)
at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:162)
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787)
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728)
at android.content.res.Resources.loadDrawable(Resources.java:1712)
at android.content.res.Resources.getDrawable(Resources.java:590)
at android.widget.ImageView.resolveUri(ImageView.java:564)
at android.widget.ImageView.setImageResource(ImageView.java:280)
at com.thankcreate.care.MainActivity.addTab(MainActivity.java:95)
at com.thankcreate.care.MainActivity.setTabs(MainActivity.java:78)
at com.thankcreate.care.MainActivity.onCreate(MainActivity.java:36)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1794)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1851)
at android.app.ActivityThread.access$1500(ActivityThread.java:132)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4277)
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:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)

最佳答案

这是死循环执行造成的。这可能是由用作图标的可绘制对象中的循环调用引起的。具有指定 drawableId 的 Drawable 可能正在调用第二个 drawable,而第二个 drawable 又会调用第一个 drawable。

提供有关您正在使用的可绘制对象的更多详细信息。这可能有助于提供更好的答案。

关于java.lang.StackOverflowError 由 setImageResource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14250198/

相关文章:

java - 如何将一个对象添加到另一个对象的数组中java

安卓蓝牙 : Software Caused Connection Abort IOException?

java - 递归删除链表中的最后一次出现,Java

java - 接受许可后如何运行相机

android - 在 Genymotion 上运行应用程序

java - Sax 解析器字符数组到整数?

Android API 检查调用是 Activity 还是保持

java - 如何围绕实现 java.security.Principal 的类中的方法创建切面?

java - JTextField 卡在 ActionListener 的特定文本上

java - 在 Android Service 和 Activity 之间保持 Messenger 的 Activity 状态