【问题标题】:Asset Manager has issues with my file(Android)Asset Manager 我的文件有问题(Android)
【发布时间】:2012-10-27 08:31:51
【问题描述】:

我的 Android 应用中的资产中有一个名为 Gate.IC 的文件。

我使用这段代码来测量资产中文件的长度:

private byte[] Buf = new byte[1024*512];

public int FileLength (String s)
{
    int Count = 0;
    try {
        InputStream s2 = assetManager.open(s);
        int tmp = 0;
        while ((tmp=s2.read(Buf))>0)
            Count+=tmp;
        s2.close();
    }
    catch (IOException e) {
        String Message = e.getMessage();
    }
    return Count;
}

此代码适用于除此之外的所有文件。

当它到达这个文件时,它会打开它(并显示正确的文件长度),但是当它读取它时,我得到一个 IOException 并且 LogCat 说“读取资产数据时出错”,然后是“无法访问资产数据: -1"

如果我使用不同的文件并将其名称更改为 Gate.IC 并且资产中没有实际的 Gate.IC 文件,它可以工作。 如果我将原始 Gate.IC 的名称更改为另一个资产的名称,则会出现与“封面”名称相同的错误。

我不知道这个文件是什么,它就是无法读取。

这是流氓文件:

https://dl.dropbox.com/u/8025882/RPG/Gate.IC

【问题讨论】:

  • 这个错误在 Nexus 4 上没有出现,但在三星 Galaxy SII 上出现了!

标签: java android exception file-io


【解决方案1】:

您可以使用它来获取文件的长度:

getAssets().openFd( "filename" ).getLength();

【讨论】:

  • 谢谢,但我在尝试读取文件时仍然遇到同样的问题。显然我的文件被压缩了,我需要以某种方式读取压缩文件?
【解决方案2】:

我已经解决了这个问题。 正如我所提到的,事实证明 ADT 或 Android SDK 打包会压缩一些资产。我的文件是我自己的自定义格式,将被压缩。 一旦你的文件被压缩,你就不能像我一样阅读它了。

Android SDK 中有一个名为 aapt.exe 的程序。它对资产进行打包。 您需要做的就是使用标志 -0 调用此命令。 听起来很简单,对吧?

问题在于 Eclipse 不允许您从 ADT 插件中向此命令添加标志。

您需要编辑 Android SDK XML 构建文件,或者将 aapt.exe 替换为您自己的程序,该程序使用您想要的标志调用原始 aapt.exe 程序。

我是后者。

这是我关于它的开发博客条目。

http://pompidev.net/2012/10/27/unable-to-access-asset-data-1-and-compressed-assetsandroid/

【讨论】:

    猜你喜欢
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多