Android - 资源和资产都丢失了

时间:2014-01-04 10:39:06

标签: java android android-resources filenotfoundexception android-assets

我正在制作一款同时使用Android资源和资源文件夹的游戏。它在我的设备和90%的其他设备上运行良好,但很少有用户遇到一些问题,其中部分或全部资源和资产突然消失。

我的res / drawable文件夹中有scan.png,我使用普通的xml按钮加载它

<Button
    android:id="@+id/scan_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentBottom="true"
    android:layout_marginLeft="4dip"
    android:layout_marginBottom="4dip"
    android:visibility="gone"
    android:background="@drawable/scan"/>

我得到的错误

Caused by: java.io.FileNotFoundException: res/drawable/scan.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)
    ... 33 more
java.io.FileNotFoundException: res/drawable/scan.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)
    at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
    at android.view.View.<init>(View.java:1951)
    at android.widget.TextView.<init>(TextView.java:389)
    at android.widget.Button.<init>(Button.java:108)
    at android.widget.Button.<init>(Button.java:104)
    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)
    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 android.view.LayoutInflater.inflate(LayoutInflater.java:276)
    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:209)
    at android.app.Activity.setContentView(Activity.java:1657)
    at com.leftcorner.craftersofwar.CraftersofWar.loadMain(CraftersofWar.java:323)
    at com.leftcorner.craftersofwar.CraftersofWar.access$4(CraftersofWar.java:320)
    at com.leftcorner.craftersofwar.CraftersofWar$loadContent.onPreExecute(CraftersofWar.java:281)
    at android.os.AsyncTask.execute(AsyncTask.java:391)
    at com.leftcorner.craftersofwar.CraftersofWar$2.onGlobalLayout(CraftersofWar.java:249)
    at android.view.ViewTreeObserver.dispatchOnGlobalLayout(ViewTreeObserver.java:549)
    at android.view.ViewRoot.performTraversals(ViewRoot.java:1195)
    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:867)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
    at dalvik.system.NativeStart.main(Native Method)

CraftersofWar.java:323是

setContentView(R.layout.main);

然后,我加载了一个资产runebase.png,该资产存储在我的assets文件夹中,带有

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;

InputStream is = null;
try {
    is = assets.open(imgName);

    BitmapFactory.decodeStream(is, null, options); //Returns null, sizes are in the options variable

    sourceRect.set(0, 0, options.outWidth / parts, options.outHeight);
    targetRect.set(0, 0,
            Math.round((float) sourceRect.width() * Utility.getScaleWidth() * multiplier),
            Math.round((float) sourceRect.height() * Utility.getScaleHeight() * multiplier)
    );

} catch (IOException e) {
    if(GameSettings.debug) e.printStackTrace();
    else ACRA.getErrorReporter().handleException(e);
} finally {
    if(is != null){
        try {
            is.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

我得到的错误是

java.io.FileNotFoundException: runebase.png
at android.content.res.AssetManager.openAsset(Native Method)
at android.content.res.AssetManager.open(AssetManager.java:314)
at android.content.res.AssetManager.open(AssetManager.java:288)
at com.leftcorner.craftersofwar.images.StorageBitmap.initialize(StorageBitmap.java:72)
at com.leftcorner.craftersofwar.images.BitmapHandler.initialize(BitmapHandler.java:84)
at com.leftcorner.craftersofwar.CraftersofWar$loadContent.onPreExecute(CraftersofWar.java:279)
at android.os.AsyncTask.execute(AsyncTask.java:391)
at com.leftcorner.craftersofwar.CraftersofWar$2.onGlobalLayout(CraftersofWar.java:249)
at android.view.ViewTreeObserver.dispatchOnGlobalLayout(ViewTreeObserver.java:549)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1195)
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:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)

其中StorageBitmap.java:72是

is = assets.open(imgName);

我只知道这些错误发生在Android版本4.0.3的LG optimus l7和Android版本2.3.6的三星Galaxy Y(GT-S5360)上。但是,似乎有2,40%的用户拥有Galaxy Y,到目前为止只有一个用户遇到了错误。

我已将我上传到Google Play的.apk解压缩,它包含所有资源和资源。

我与Boris Strandjev讨论的结果:

  • 我有正确的可绘制文件夹,图像不会出现在错误的文件夹中
  • 当游戏部署在与Galaxy Y大致相同的模拟器上时,游戏可以完美运行
  • SD锁定不应成为原因
  • 屏幕锁定和睡眠模式不应成为问题的根源
  • 特定设备上的内存有限可能是问题,但这很难证明

StackOverflow上的类似问题:

Weird FileNotFoundException exception from Android app in the wild

Strange exception about resource not found

0 个答案:

没有答案