在Android 1.5上运行应用程序时的NotFoundException和FileNotFoundException
我正在尝试将安卓1.6+应用程序向后移植到安卓1.5 以下是我的建议:在Android 1.5上运行应用程序时的NotFoundException和FileNotFoundException,android,Android,我正在尝试将安卓1.6+应用程序向后移植到安卓1.5 以下是我的建议: 。。。我已经做了以下工作: 修改AndroidManifest.xml以将minSdkVersion设置为3 将以前位于drawable mdpi/中的所有文件移动到drawable/ 将drawable hdpi/重命名为drawable-hdpi-v4/ 在我看来,这应该确保1.5设备使用drawable/中的文件,而1.6及更高版本的设备则酌情使用drawable/和drawable-hdpi-v4/中的文
E/AndroidRuntime( 1096): Caused by: java.lang.reflect.InvocationTargetException
E/AndroidRuntime( 1096): at android.widget.ImageView.<init>(ImageView.java:103)
E/AndroidRuntime( 1096): at java.lang.reflect.Constructor.constructNative(Native Method)
E/AndroidRuntime( 1096): at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
E/AndroidRuntime( 1096): at android.view.LayoutInflater.createView(LayoutInflater.java:499)
E/AndroidRuntime( 1096): ... 26 more
E/AndroidRuntime( 1096): Caused by: android.content.res.Resources$NotFoundException: File res/drawable/bg.png from drawable resource ID #0x7f02002e
E/AndroidRuntime( 1096): at android.content.res.Resources.loadDrawable(Resources.java:1641)
E/AndroidRuntime( 1096): at android.content.res.TypedArray.getDrawable(TypedArray.java:548)
E/AndroidRuntime( 1096): at android.widget.ImageView.<init>(ImageView.java:113)
E/AndroidRuntime( 1096): ... 30 more
E/AndroidRuntime( 1096): Caused by: java.io.FileNotFoundException: res/drawable/bg.png
E/AndroidRuntime( 1096): at android.content.res.AssetManager.openNonAssetNative(Native Method)
E/AndroidRuntime( 1096): at android.content.res.AssetManager.openNonAsset(AssetManager.java:392)
E/AndroidRuntime( 1096): at android.content.res.Resources.loadDrawable(Resources.java:1634)
E/AndroidRuntime( 1096): ... 32 more
E/AndroidRuntime(1096):由以下原因引起:java.lang.reflect.InvocationTargetException
E/AndroidRuntime(1096):位于android.widget.ImageView。(ImageView.java:103)
E/AndroidRuntime(1096):位于java.lang.reflect.Constructor.constructNative(本机方法)
E/AndroidRuntime(1096):位于java.lang.reflect.Constructor.newInstance(Constructor.java:446)
E/AndroidRuntime(1096):位于android.view.LayoutInflater.createView(LayoutInflater.java:499)
E/AndroidRuntime(1096):。。。26多
E/AndroidRuntime(1096):由以下原因引起:android.content.res.Resources$NotFoundException:文件res/drawable/bg.png来自可绘图资源ID#0x7f02002e
E/AndroidRuntime(1096):位于android.content.res.Resources.loadDrawable(Resources.java:1641)
E/AndroidRuntime(1096):位于android.content.res.TypedArray.getDrawable(TypedArray.java:548)
E/AndroidRuntime(1096):位于android.widget.ImageView。(ImageView.java:113)
E/AndroidRuntime(1096):。。。30多
E/AndroidRuntime(1096):由以下原因引起:java.io.FileNotFoundException:res/drawable/bg.png
E/AndroidRuntime(1096):位于android.content.res.AssetManager.OpenNoAssetNative(本机方法)
E/AndroidRuntime(1096):位于android.content.res.AssetManager.OpenNoAsset(AssetManager.java:392)
E/AndroidRuntime(1096):位于android.content.res.Resources.loadDrawable(Resources.java:1634)
E/AndroidRuntime(1096):。。。32多
出于我不理解的原因,1.5设备无法查看bg.png图像文件,该文件的一个版本位于drawable/和drawable-hdpi-v4/目录中
运行相同的二进制文件在1.6上运行良好
为什么1.5版设备无法通过此设置查看我的res/drawable/bg.png图像
更新:如中所述,我正在使用Android SDK r6,并已将我的mdpi资源放在drawable/目录中。另外,我已经验证了这个问题不是孤立于bg.png的。如果我在xml中删除对损坏的绘图表的引用,则在setContentView()过程中,应用程序会在下一个图形和后续的每个图形上中断。几天前,我遇到了同样的问题。我找到的唯一解决方案是从头开始创建一个新项目,并向其中添加源文件和res文件。这肯定会解决问题。如果您使用Android 1.6构建项目,并且minSDKVesrion设置为3,则只能创建3个文件夹:可绘制hdpi、可绘制mdpi和可绘制ldpi。我在我的项目中重新创建了您的问题,当我更改Res文件夹结构时,它开始工作得很好。您当然可以尝试一下(Android 1.5有一个问题您应该注意。许多1.5 mdpi设备从drawable ldpi文件夹中获取资源。)成功 问题是,我在drawable-hdpi-v4/中有一个foo.png资源,但它不在drawable/目录中。当我从布局文件中引用R.drawable.foo时,1.5 emulator因此无法为该id找到合适的资源。使跟踪变得如此困难的是,在引用foo.png时,错误并没有立即发生,而是在引用的下一个资源bg.png上抛出了错误。谷歌已经确认这是一个bug
将一个mdpi版本的foo.png添加到drawable/目录中修复了这个问题。hm,我刚刚尝试过,但似乎没有任何区别。嗨,Amit,1.5 emulator根本无法识别drawable mdpi目录。如果我将我的drawable/资源移动到drawable mdpi/,它将找不到任何资源(包括应用程序图标)。如果我把它们放在drawable/中,它至少会找到应用程序图标(尽管出于某种原因不是bg.png)哇,5个月后这又咬了我一口。堆栈溢出ftw。