有关未找到资源的奇怪异常

时间:2012-01-14 03:19:59

标签: android

偶尔在市场上我的应用的许多用户(相同的版本 - 相同的APK)我得到这样的错误...我想主要的是:Caused by: java.io.FileNotFoundException: res/drawable/ic_new.png

此文件肯定存在,并且可以在其他设备上运行。我偶尔在其他带有随机文件的设备上得到这个错误。这怎么可能?

android.view.InflateException: Binary XML file line #7: Error inflating class <unknown>
  at android.view.LayoutInflater.createView(LayoutInflater.java:518)
  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)
  at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
  at android.view.LayoutInflater.rInflate(LayoutInflater.java:626)
  at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
  at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
  at com.activities.MailListActivity$MailListCursorAdapter.getView(MailListActivity.java:171)
  at android.widget.AbsListView.obtainView(AbsListView.java:1560)
  at android.widget.ListView.measureHeightOfChildren(ListView.java:1289)
  at android.widget.ListView.onMeasure(ListView.java:1200)
  at android.view.View.measure(View.java:8313)
  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
  at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
  at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
  at android.view.View.measure(View.java:8313)
  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
  at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
  at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
  at android.view.View.measure(View.java:8313)
  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
  at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
  at android.view.View.measure(View.java:8313)
  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
  at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
  at android.view.View.measure(View.java:8313)
  at android.view.ViewRoot.performTraversals(ViewRoot.java:844)
  at android.view.ViewRoot.handleMessage(ViewRoot.java:1865)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:130)
  at android.app.ActivityThread.main(ActivityThread.java:3687)
  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:842)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
  at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
  at java.lang.reflect.Constructor.constructNative(Native Method)
  at java.lang.reflect.Constructor.newInstance(Constructor.java:415)
  at android.view.LayoutInflater.createView(LayoutInflater.java:505)
  ... 37 more
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ic_new.png from drawable resource ID #0x7f02001c
  at android.content.res.Resources.loadDrawable(Resources.java:1714)
  at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
  at android.widget.ImageView.<init>(ImageView.java:118)
  at android.widget.ImageView.<init>(ImageView.java:108)
  ... 40 more
Caused by: java.io.FileNotFoundException: res/drawable/ic_new.png
  at android.content.res.AssetManager.openNonAssetNative(Native Method)
  at android.content.res.AssetManager.openNonAsset(AssetManager.java:406)
  at android.content.res.Resources.loadDrawable(Resources.java:1706)
  ... 43 more

1 个答案:

答案 0 :(得分:4)

您没有具体提到在应用程序中组织图像的方式。但是有特定的文件夹 drawable-ldpi ,'drawable-mdpi','drawable-hdpi',甚至'drawable-xhdpi'以及基本的'drawable'文件夹。

也许你熟悉所有这些,但我会重复他们的使用模式,因为我觉得这可能会让你失望。 ldpi,mdpi,hdpi和xhdpi意味着低,中,高和超高dpi - 不同的屏幕分辨率。 Android有一种特殊的方法来确定您运行的设备的硬件特性,从而将其映射到最相关的:ldpi,mdpi,hdpi或xhdpi。

当涉及到需要图像的地方时,首先要搜索drawable-mdpi / image.png(如果已确定您的设备要映射到mdpi)。如果没有找到这样的图像,它会去尝试drawable / image.png并在发现时重新调整它。就是这样,如果这两个搜索失败并且你在其他一些分辨率的文件夹中提供了图像,它就不会使用它。这意味着如果您在xhdpi设备上安装应用程序并且在此类设备上仅提供了ldpi和mdpi图像,则不会找到相关图像。

所以我的建议是你只有一些格式的图像。没有进一步的信息,这是我能做的最好的事情。希望我能正确理解,我会帮助你。