我从Android市场获得崩溃报告:
android.content.res.Resources$NotFoundException: Resource ID #0x....
我每周大约有17个。它在我的代码中指向了以下内容:
context.getResources().getDrawable(R.drawable.foo);
该资源肯定存在于我的/ drawable文件夹中。我有几十万个安装,我不确定这对于一些用户来说可能会失败,但是对绝大多数用户来说都是如此。我想知道发生了什么,因为他们无法在这种状态下使用该应用程序。有什么想法吗?
由于
---------更新----------------------
此外,我可以在我的R.java文件中看到有关drawable的条目,如下所示:
public static final int foo=0x7f020034;
我做了一个干净的项目构建,然后直接做了我的发布版本(之间没有代码修改来给自动eclipse构建东西可能让R文件出错)
由于
答案 0 :(得分:46)
I got this exception:
Resources$NotFoundException: String resource ID
when I was using setText with an int value. I had to convert it to String.
Before:
myTextView.setText(obj.SomeIntProperty);
After:
myTextView.setText(String.valueOf(obj.SomeIntProperty));
答案 1 :(得分:10)
崩溃报告是否来自版本< = 1.6,并且您只在合格的文件夹中拥有某些资源,即"drawable-mdpi"
而不仅仅是"drawable"
?如果是这样,那么请阅读"已知问题"在this page的底部。
答案 2 :(得分:2)
我今天早上在申请中发现了同样的问题,并找到了一个非常简单的解决方案。问题看起来大而复杂,但事实并非如此。
我遵循的步骤是
据我所知,它不应再给出这个例外。
原因:构建应用程序时,R.java包含所有内存地址,并且发生这些地址对于下次运行无效。
第二个原因:当你拥有支持lanscape和portrati模式的应用程序时,如果你还没有为其中任何一个编写XML文件,那么可能会导致这种崩溃。当你必须支持这两种模式时,很有可能出现OutoFmemory和Memory泄漏问题。请考虑一下。
答案 3 :(得分:2)
这种情况多次出现,特别是在低密度手机上。我也注意到它主要发生在9个补丁图像上。
我的解决方案是在尽可能多的密度资源文件夹中包含9个补丁图像(mdpi,ldpi,hdpi,xdpi)。
答案 4 :(得分:1)
用于记录加载布局的有用技术是将android:tag
附加到布局XML文件的每个根容器,并在设置onCreate()
后在setContentView(R.id.layout)
中仅打印值标签。它会告诉你哪些已经加载 - 如果仅用于调试目的,你仍然需要通过添加所有可能的组合来插入漏洞。
另外,将您的drawable重命名为drawables-nodpi
文件夹以确保没有丢失drawable。这会关闭内部缩放,使APK更小,并且不会从任何其他可绘制文件夹中“选择”。
一旦弄清楚它是布局还是可绘制,其他指标将帮助您找到根本原因。现在,首先使用“always use”drawables检查布局。
星期一,当我回到办公室时,我会向您发布用于衡量此线程中捕获的数据的指标代码 - Which part of Android is in charge of picking a correct resource profile?
答案 5 :(得分:1)
您已包含某些引用Android SDK内容的代码。
例如,我一旦遇到类似的问题,当我删除该行
时android:background="?android:attr/actionBarItemBackground"
从我的xml中,一切正常。
答案 6 :(得分:0)
如果您引用的资源(让我们称之为ResA)反过来引用缺少的资源(让我们称之为ResB),也会发生这种情况。 Android会为ResA引发ResourceNotFoundException,即使真正缺少的是ResB。这就是生活!
就我而言,ResB是在值-swxxxdp中定义的,而不是在值中定义的。因此,我在手机上获得此例外,但在平板电脑上却没有。
答案 7 :(得分:0)
在我的情况下,我有一个导致崩溃的布局文件:
我收到了以下日志 -
这显示了我实际代码的链接:
这行代码是什么:
我按照最受欢迎的答案的建议检查了我的文件导航器文件夹名称,看起来似乎缺少的资源位于正常layout
文件夹
但是当查看Project
文件导航器而不是Android
文件导航器时,我能够看到不仅缺少正常layout
文件夹中缺少的资源文件,但是我没有一个没有特殊扩展名的layout
文件夹。
将Android资源目录添加到res
文件夹并将其调用layout
,然后将专业文件夹(例如layout-sw720dp
)中的资源粘贴到其中,修复了我的问题
此解决方案也适用于建议的其他文件夹,例如drawable
中没有文件,只有drawable-xxhdpi
中的文件可以通过将文件移动到drawable
并调整它来修复它如所须。好运文件夹恶魔!
答案 8 :(得分:0)
答案 9 :(得分:0)
未定义纵向XML布局文件时,可能会发生错误。它不会一直发生,但是会发生,例如,如果用户快速关闭手机并打开电话,我想在这种情况下,系统会以纵向方向调用onCreate,然后横向调用onCreate。